合并两个具有相同节点数量的XML文件。

huangapple 未分类评论45阅读模式
英文:

merging two xmls of same number of nodes

问题

我使用Java DOM解析器合并了两个XML文件:

a.xml

<config>
<category name="mimetypes">
<!-- application mime types -->
<mime-type type="1"></mime-type>
<!-- eps -->
<mime-type type="2"></mime-type>
<!-- octet-stream -->
<mime-type type="3"></mime-type>
</category>
</config>

b.xml:

<config>
<category name="mimetypes">
<!-- application mime types -->
<!-- eps -->
<mime-type type="2"></mime-type>
<!-- octet-stream -->
<mime-type type="3"></mime-type>
<mime-type type="4"></mime-type>
</category>
</config>

我得到的输出是:

<config>
<category name="mimetypes">
<!-- application mime types -->
<mime-type type="1"></mime-type>
<!-- eps -->
<mime-type type="2"></mime-type>
<!-- octet-stream -->
<mime-type type="3"></mime-type>
</category>
<mime-type type="2"></mime-type>
</config>

期望的输出是:

<config>
<category name="mimetypes">
<!-- application mime types -->
<mime-type type="1"></mime-type>
<!-- eps -->
<mime-type type="2"></mime-type>
<!-- octet-stream -->
<mime-type type="3"></mime-type>
<mime-type type="4"></mime-type>
</category>
</config>

我尝试过的代码是:

public class MergeXmlDemo {
    public static void main(String args[]) {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = null;
        Document doc = null;
        Document doc2 = null;
        db = dbf.newDocumentBuilder();
        doc = db.parse(new File("second.xml"));
        doc2 = db.parse(new File("first.xml"));
        NodeList ndListFirstFile = doc.getElementsByTagName("config");
        Node nodeArea = doc.importNode(doc2.getElementsByTagName("mime-type").item(0), true);
        ndListFirstFile.item(0).appendChild(nodeArea);
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(System.out);
        transformer.transform(source, result);
    }
}

将两个具有相同节点数的XML文件合并后,输出的文件节点数相同,并且输出中缺少类型为4的节点。如果有任何问题,欢迎提问。

英文:

I have merged two xml files using java dom parser:
a.xml

&lt;config&gt;
&lt;category name=&quot;mimetypes&quot;&gt;
&lt;!-- application mime types --&gt;
&lt;mime-type type=1&gt;&lt;/mime-type&gt;
&lt;!-- eps --&gt;
&lt;mime-type type=2&gt;&lt;/mime-type&gt;
&lt;!-- octet-stream --&gt;
&lt;mime-type type=3&gt;&lt;/mime-type&gt;
&lt;/category&gt;
&lt;/config&gt;

b.xml:

&lt;config&gt;
&lt;category name=&quot;mimetypes&quot;&gt;
&lt;!-- application mime types --&gt;
&lt;!-- eps --&gt;
&lt;mime-type type=2&gt;&lt;/mime-type&gt;
&lt;!-- octet-stream --&gt;
&lt;mime-type type=3&gt;&lt;/mime-type&gt;
&lt;mime-type type=4&gt;&lt;/mime-type&gt;
&lt;/category&gt;
&lt;/config&gt;

the output I get

&lt;config&gt;
&lt;category name=&quot;mimetypes&quot;&gt;
&lt;!-- application mime types --&gt;
&lt;mime-type type=1&gt;&lt;/mime-type&gt;
&lt;!-- eps --&gt;
&lt;mime-type type=2&gt;&lt;/mime-type&gt;
&lt;!-- octet-stream --&gt;
&lt;mime-type type=3&gt;&lt;/mime-type&gt;
&lt;/category&gt;
&lt;mime-type type=2&gt;&lt;/mime-type&gt;
&lt;/config&gt;

Expected:

&lt;config&gt;
&lt;category name=&quot;mimetypes&quot;&gt;
&lt;!-- application mime types --&gt;
&lt;mime-type type=1&gt;&lt;/mime-type&gt;
&lt;!-- eps --&gt;
&lt;mime-type type=2&gt;&lt;/mime-type&gt;
&lt;!-- octet-stream --&gt;
&lt;mime-type type=3&gt;&lt;/mime-type&gt;
&lt;mime-type type=4&gt;&lt;/mime-type&gt;
&lt;/category&gt;
&lt;/config&gt;

Code I have tried:

public class MergeXmlDemo {
	public static void main(String args[]){
	    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	    DocumentBuilder db = null;
	    Document doc = null;
	    Document doc2 = null;
	            db = dbf.newDocumentBuilder();
	            doc = db.parse(new File(&quot;second.xml&quot;));
	            doc2 = db.parse(new File(&quot;first.xml&quot;));
	            NodeList ndListFirstFile = doc.getElementsByTagName(&quot;config&quot;);
	            Node nodeArea = doc.importNode(doc2.getElementsByTagName(&quot;mime-type&quot;).item(0), true);
	            ndListFirstFile.item(0).appendChild(nodeArea);
	            TransformerFactory tFactory = TransformerFactory.newInstance();
	            Transformer transformer = tFactory.newTransformer();
	            transformer.setOutputProperty(OutputKeys.INDENT, &quot;yes&quot;);  
	            DOMSource source = new DOMSource(doc);
	            //StreamResult result = new StreamResult(new StringWriter());
	            StreamResult result = new StreamResult(System.out);
	            transformer.transform(source, result); 
}

merging two xml files with same number of nodes is giving the file with same number of nodes and type=4 is missing from the output.
Any help is appreciated

huangapple
  • 本文由 发表于 2020年4月8日 20:54:43
  • 转载请务必保留本文链接:https://java.coder-hub.com/61101181.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定