通过使用Java使用dom或sax复制元素(包括子元素)来创建大型xml文件的最佳方法
我有一个xml文件(ABC.xml),只需要复制通过使用Java使用dom或sax复制元素(包括子元素)来创建大型xml文件的最佳方法,java,xml,dom,sax,stax,Java,Xml,Dom,Sax,Stax,我有一个xml文件(ABC.xml),只需要复制 <Transaction>...</Transaction> 。。。 多次(超过100000次)保持标题和尾部完整,创建最终大小可能高达1GB的NEW.xml。此外,我还必须按顺序增加每个事务的Uniqueid 由于我是xml新手,我一直在寻找最好的方法,我感到困惑。 有人能帮我找到最好的方法(使用DOM或SAX)和一些代码吗。 你也可以给我一些关于它的链接 ABC.xml ======== <?xml
<Transaction>...</Transaction>
。。。
多次(超过100000次)保持标题和尾部完整,创建最终大小可能高达1GB的NEW.xml。此外,我还必须按顺序增加每个事务的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>
ABC.xml
========
2013020901:12
1230001
abc
aaaa
bbbb
中交
123
美元
aaaa
bbbb
中交
1123
NEW.xml
=======
2013020901:12
1230001
abc
aaaa
bbbb
中交
123
美元
aaaa
bbbb
中交
1230002
abc
aaaa
bbbb
中交
123
美元
aaaa
bbbb
中交
2246
如果您的源XML格式正确,则会有所帮助—它需要一个外部包装器元素
Java中有许多XQuery处理器可用,例如Saxon。只需执行查询
<doc>{doc/Header, for $i in 1 to 100000 return doc/Transaction, doc/Footer}</doc>
{doc/Header,对于$i,在1到100000之间返回doc/Transaction,doc/Footer}
在提供的输入文档上,假设
作为外部包装元素。“大文件”自动建议在DOM上使用“SAX:)谁知道呢-读/写循环中的简单“sed”脚本或Java(即简单文本i/O)可能比DOM或SAX更可取。Mike,这是提供给我的示例xml,他们告诉我它是正确的,没有外包装。不要相信别人告诉你的,检查规格。从技术上讲,您的示例不是格式良好的文档,尽管它是一个格式良好的外部解析实体。这基本上意味着它只能作为更大的XML文档的一部分使用。