现在的需求是:
有一些XML文件,需要把这些XML合并成一个新的XML,并且合并一些 <column type="name">重复的项,比如
<row>
<column type="artist_id">36 </column>
<column type="name">Aerosmith </column>
<column type="picture_url">aero.jpg </column>
</row>
<row>
<column type="artist_id">26 </column>
<column type="name">Aerosmith </column>
<column type="picture_url">arro.jpg </column>
</row>
合并成
<row>
<column type="artist_id">36, 26 </column>
<column type="name">Aerosmith </column>
<column type="picture_url">aero.jpg, arro.jpg </column>
</row>
我应该按照什么顺序做比较好呢。
先读每个XML的数据?还是先把这些XML合并成一个新XML?
另外要求用XPATH做,各位有经验的大大能说说思路么?还有哪些重要的知识点?
才接触xml,谢谢了。 (分不多,因为另外一个贴30分,还无满意回复,可以去那个贴加分)
有一些XML文件,需要把这些XML合并成一个新的XML,并且合并一些 <column type="name">重复的项,比如
<row>
<column type="artist_id">36 </column>
<column type="name">Aerosmith </column>
<column type="picture_url">aero.jpg </column>
</row>
<row>
<column type="artist_id">26 </column>
<column type="name">Aerosmith </column>
<column type="picture_url">arro.jpg </column>
</row>
合并成
<row>
<column type="artist_id">36, 26 </column>
<column type="name">Aerosmith </column>
<column type="picture_url">aero.jpg, arro.jpg </column>
</row>
我应该按照什么顺序做比较好呢。
先读每个XML的数据?还是先把这些XML合并成一个新XML?
另外要求用XPATH做,各位有经验的大大能说说思路么?还有哪些重要的知识点?
才接触xml,谢谢了。 (分不多,因为另外一个贴30分,还无满意回复,可以去那个贴加分)
File[] sDoc = dir.listFiles();
try {
SAXBuilder dbf = new SAXBuilder();
Document doc = (Document) dbf.build(sDoc[0]);
Element docroot = doc.getRootElement();
for (int i = 1 ; i < sDoc.length; i++){
Document tmpdoc = dbf.build(sDoc[i]);
List nlt = tmpdoc.getRootElement().getChildren();
for (int j=0;j<nlt.size();j++){
Element el=(Element)nlt.get(j);
//get free element
el.detach();
docroot.addContent(el);
}
System.out.println("append file" +i + "success");
}
<?xml version="1.0" encoding="UTF-8"?>
<list>
<column artist_id="36" name="Aerosmith" picture_url="aero.jpg"></column>
........................................................................
........................................................................
</list>
具体可以这样:使用XPATH可以获取指定的某个节点,比如"/column type",然后循环遍历xml所有这样的节点,分别得到
"artist_id","name","picture_url"的值,然后存到list里面,或者用流写到一个文件里去,注意分隔一下,比如
36|Aerosmith|aero.jpg,符号用什么无所谓,把这些从xml解析到的内容都放在一起,例如:36|Aerosmith|aero.jpg
37|Berosmith|bero.jpg
38|Cerosmith|cero.jpg
.....................
然后要合成新的xml的话,就可以从这个文件里再读,自己用StringBuffer拼个xml出来,不知道这样和lz意否
<?xml version="1.0"?>
<!DOCTYPE directory [
<!ENTITY disclaimer1 SYSTEM "./order1.xml">
<!ENTITY disclaimer2 SYSTEM "./order2.xml">
]>
<directory>
&disclaimer1;
&disclaimer2;
</directory>
我看了你给的这个文章,上面这个xml是执行了就可以直接生成新xml了么?谢谢!
我写了个xml4,是合并xml2和xml3的。
但是
Document doc = builder.parse("xml4.xml");
这句报错,换成xml2和xml3都没问题。
郁闷啊
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource domSource = new DOMSource(doc);
transformer.transform(domSource, new StreamResult(new File("xml4.xml")));