Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过使用Java使用dom或sax复制元素(包括子元素)来创建大型xml文件的最佳方法_Java_Xml_Dom_Sax_Stax - Fatal编程技术网

通过使用Java使用dom或sax复制元素(包括子元素)来创建大型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

我有一个xml文件(ABC.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文档的一部分使用。