通过使用Java复制dom或sax元素(包括子元素)来创建大型xml文件的最佳方法

时间:2013-02-09 20:30:37

标签: java xml dom sax stax

我有一个xml文件(ABC.xml),我只需复制

<Transaction>...</Transaction>    

多次(超过100000次)保持Header和Trailer完整无缺,创建NEW.xml,其最终大小可达1GB。此外,我必须按顺序递增每个事务的唯一ID。

由于我是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>

1 个答案:

答案 0 :(得分:0)

如果您的源XML格式正确,它会有所帮助 - 它需要一个外部包装元素。

Java中有许多XQuery处理器,例如Saxon。只需执行查询

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

在提供的输入文档上,假设<doc>为外部包装元素。