2013-02-09 2 views
0

У меня есть XML-файл (ABC.xml), и мне нужно дублировать толькоЛучший способ создать огромный файл XML, дублируя элемент (включая детей) с йот или саксофоне с помощью Java

<Transaction>...</Transaction>  

несколько раз (более 100000 раз), сохраняя неповрежденный заголовок и трейлер, создавая NEW.xml, окончательный размер которого может превышать 1 ГБ. Кроме того, я должен постепенно увеличивать значение Uniqueid для каждой транзакции.

Как я новичок в xml, я искал это наилучшим образом, и я смутился. Может ли кто-нибудь помочь мне с наилучшим способом сделать это (используя DOM или SAX) и некоторый фрагмент кода. Также не могли бы вы дать мне некоторые ссылки об этом.

ABC.xml 
======== 
<?xml version="1.0" encoding="UTF-8"?> 
<Header><Datetime><date>20130209</date><Time>01:12</Time></Datetime></Header> 
<Transaction> 
    <Uniqueid>1230001</Uniqueid> 
<Affiliate> 
    <Name>abc</Name> 
    <Address> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Address> 
    <Amount>123.00</Amount> 
    <Currency>USD</Currency> 
    <Purpose> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Purpose> 
</Affiliate> 
</Transaction> 
<Trailer><TotalTransactions>1</TotalTransactions><TotalAmount>123<TotalAmount> </Trailer> 


NEW.xml 
======= 
<?xml version="1.0" encoding="UTF-8"?> 
<Header><Datetime><date>20130209</date><Time>01:12</Time></Datetime></Header> 
<Transaction> 
<Uniqueid>1230001</Uniqueid> 
<Affiliate> 
    <Name>abc</Name> 
    <Address> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Address> 
    <Amount>123.00</Amount> 
    <Currency>USD</Currency> 
    <Purpose> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Purpose> 
</Affiliate> 
</Transaction> 
<Transaction> 
<Uniqueid>1230002</Uniqueid> 
<Affiliate> 
    <Name>abc</Name> 
    <Address> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Address> 
    <Amount>123.00</Amount> 
    <Currency>USD</Currency> 
    <Purpose> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Purpose> 
</Affiliate> 
</Transaction> 
<Trailer><TotalTransactions>2</TotalTransactions><TotalAmount>246<TotalAmount></Trailer> 
+0

«Огромный файл» автоматически предлагает «SAX» над DOM :) Кто знает - простой сценарий «sed» или Java в цикле чтения/записи (т. Е. Простой ввод-вывод) может быть предпочтительнее для DOM или SAX. IMHO ... – paulsm4

ответ

0

Это поможет, если ваш исходный XML был хорошо сформирован - ему нужен внешний элемент оболочки.

В Java есть несколько процессоров XQuery, например Saxon. Просто выполнить запрос

<doc>{doc/Header, for $i in 1 to 100000 return doc/Transaction, doc/Footer}</doc> 

на прилагаемом ввода документа, при условии, <doc> в качестве внешнего элемента обертки.

+0

Майк, это образец xml, предоставленный мне, и ему сказали, что он правильный и не имеет внешней оболочки. – cash

+0

Не верьте тому, что говорят вам люди, проверьте спецификации. Технически ваш образец не является хорошо сформированным документом, хотя он является хорошо сформированным внешним анализируемым объектом. Это в основном означает, что он может использоваться только как часть более крупного XML-документа. –

 Смежные вопросы

  • Нет связанных вопросов^_^