现在的需求是: 
有一些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分,还无满意回复,可以去那个贴加分)

解决方案 »

  1.   

    bang ding  hei hei 
      

  2.   

    参考:File dir = new File(wdir);
      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");
       } 
      

  3.   

    同时http://dev.csdn.net/article/49/49433.shtm
      

  4.   

    我说下我自己的意见:这些文件先综合成一个比较好,然后再解析这一个xml,可以搞成这个样子:
    <?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意否
      

  5.   

    请问,
    <?xml version="1.0"?>
    <!DOCTYPE directory [
       <!ENTITY disclaimer1 SYSTEM "./order1.xml">
       <!ENTITY disclaimer2 SYSTEM "./order2.xml">
    ]>
    <directory>
       &disclaimer1;
       &disclaimer2;
    </directory>
    我看了你给的这个文章,上面这个xml是执行了就可以直接生成新xml了么?谢谢!
      

  6.   

    哦,我懂那个的意思了,不好意思。就是说我可以用java写一个这样的xml文件吧。
      

  7.   

    又有问题了..
    我写了个xml4,是合并xml2和xml3的。
    但是
    Document doc = builder.parse("xml4.xml");
    这句报错,换成xml2和xml3都没问题。
    郁闷啊
      

  8.   

    xml4.xml里边没有内容的话parse会出错,合并后的xml不需要提前创建
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer();
    DOMSource domSource = new DOMSource(doc);
    transformer.transform(domSource, new StreamResult(new File("xml4.xml")));