Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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 使用SAX解析器合并XML_Java_Xml - Fatal编程技术网

Java 使用SAX解析器合并XML

Java 使用SAX解析器合并XML,java,xml,Java,Xml,我已经看了下面链接中的讨论- 我只需要使用SAX解析器使用相同的功能,因为我只需要合并两个文件,但它们的大小非常大 请帮忙 文件1 <root> <Item> <a>jhiuo55jhj</a> <b>jhjoiohj</b> <c>jhjh334j</c> </Item> </root> jhiuo55jh

我已经看了下面链接中的讨论-

我只需要使用SAX解析器使用相同的功能,因为我只需要合并两个文件,但它们的大小非常大

请帮忙

文件1

<root>
    <Item>
        <a>jhiuo55jhj</a>
        <b>jhjoiohj</b>
        <c>jhjh334j</c>
    </Item>
</root>

jhiuo55jhj
jhjoiohj
JH334J
文件2

<root>
    <Item>
        <x>jhi99jhj</x>
        <y>jhyty66jhj</y>
        <z>jhxdx3jhj</z>
    </Item>
</root>

jhi99jhj
jhyty66jhj
jhxdx3jhj
预期产量

<root>
    <Item>
        <a>jhiuo55jhj</a>
        <b>jhjoiohj</b>
        <c>jhjh334j</c>
        <x>jhi99jhj</x>
        <y>jhyty66jhj</y>
        <z>jhxdx3jhj</z>
    </Item>
</root> 

jhiuo55jhj
jhjoiohj
JH334J
jhi99jhj
jhyty66jhj
jhxdx3jhj

基本解决方案,不包括名称空间或属性

  • 使用XMLStreamWriter将处理程序中的内容接收到一个输出中
  • 跳过根元素,这样我们就不会将它们放在输出中两次
代码


我建议您在这里使用SAX-DOM方法以获得更好的性能

假设下面是输入xml文件

1) First.xml
<root>
    <Item>
        <a>1</a>
        <b>2</b>
        <c>3</c>
    </Item>
    <Item>
        <a>1</a>
        <b>2</b>
        <c>3</c>
    </Item>
</root>
2) Second.xml
<root>
    <Item>
        <x>11</x>
        <y>22</y>
        <z>33</z>
    </Item>
    <Item>
        <x>44</x>
        <y>55</y>
        <z>66</z>
    </Item>
</root>
1)First.xml
1.
2.
3.
1.
2.
3.
2) Second.xml
11
22
33
44
55
66
合并这些XML的步骤:

  • 使用DOM读取第一个.xml文件
  • 现在开始使用SAX读取第二个.xml文件
  • 保留一个计数器变量i
  • 每当SAX解析器为Item节点找到startElement时,从存储在DOM中的第i个Item节点的First.xml获取其他字段
  • 我++
  • 将内容写入OutputStream
  • 解析完成,关闭Outputstream

  • 嗨,亚当,是的,这是要求。请帮忙。谢谢亚当,你的快速帮助。让我试试这一个,但我在方法endElement中遇到了错误,它无法解决转储问题,并输出这两个。@Adam,您的程序给出了如下输出,这不是Sugata所要求的。。。jhiuo55jhj JHJJJJJJ334J JHI99JHJJJJJYTY66JHJ jhxdx3jhj Hi Adam,我运行了代码,但它附加了两个XML,我需要将文件1中的每个项与文件2中的每个项合并。i、 e最终输出将具有包含file1和file2中item节点的所有字段的all Items节点。
    1) First.xml
    <root>
        <Item>
            <a>1</a>
            <b>2</b>
            <c>3</c>
        </Item>
        <Item>
            <a>1</a>
            <b>2</b>
            <c>3</c>
        </Item>
    </root>
    2) Second.xml
    <root>
        <Item>
            <x>11</x>
            <y>22</y>
            <z>33</z>
        </Item>
        <Item>
            <x>44</x>
            <y>55</y>
            <z>66</z>
        </Item>
    </root>