0

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

<Transaction>...</Transaction>    

多次(超过 100000 次)保持 Header 和 Trailer 完整,创建最终大小可能高达 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>
4

1 回答 1

0

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

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

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

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

于 2013-02-09T23:54:27.090 回答