由于项目需要,现在需要将一个Document的节点替换掉另一个Document的相同节点,本来想用replaceChild方法来做,但是总是出错,希望各位大虾帮忙,必有分数回报。具体的情况是这样的: 
第一个Document结构如下: 
<?xml version="1.0" encoding="UTF-8"?> 
<CIF xmlns:xalan="http://xml.apache.org/xslt"> 
  <CONTROLAREA> 
    <ActionFlag>A </ActionFlag> 
  </CONTROLAREA> 
  <BDA> 
    <Organization> 
      <TypeCode>003 </TypeCode> 
      <Site> 
        <Num>2 </Num> 
        <Address> 
          <AddressTypeCode /> 
          <AddressLanguageCode /> 
        </Address> 
        <PhoneInfo> 
          <PhoneType>MAIN </PhoneType> 
          <PrimaryFlag>TRUE </PrimaryFlag> 
        </PhoneInfo> 
      </Site> 
    </Organization> 
  </BDA> 
</CIF> 第二个Document也有与此相同的结构,不过 <Address>标签里有值,其他标签里没值。 
<?xml version="1.0" encoding="UTF-8"?> 
<CIF xmlns:xalan="http://xml.apache.org/xslt"> 
  <CONTROLAREA> 
    <ActionFlag> </ActionFlag> 
  </CONTROLAREA> 
  <BDA> 
    <Organization> 
      <TypeCode/> 
      <Site> 
        <Num> </Num> 
        <Address> 
          <AddressTypeCode>123 </AddressTypeCode> 
          <AddressLanguageCode>EN </AddressLanguageCode> 
        </Address> 
        <PhoneInfo> 
          <PhoneType> </PhoneType> 
          <PrimaryFlag> </PrimaryFlag> 
        </PhoneInfo> 
      </Site> 
    </Organization> 
  </BDA> 
</CIF> 现在我想做的是把第二个Document里的 <Address>标签替换到第一个Document里,这样第一个Document的数据就齐全了。当然这个Document的结构经过简化了,项目里的数据更多,所以才想用节点替换的方法把这两个Document合并。请各位高手帮帮忙啊,我自己实在做不出来了。紧急求助,如果能按照项目需求的来实现,必有高分回报!!

解决方案 »

  1.   

    用java代码实现? 是否考虑可以用dom4j来解析Document文件?  获取到第二个Document里的Address
    然后写入到第一个Document   Address里?小弟菜鸟  望高手指教 
      

  2.   

    用Document的importNode方法先将那个节点引入,  
    再用appendChild方法添加.
    http://www.java2s.com/CN/Code/Java/XML/JavaDOMeditCopyaNodefromOneParseTreeintoAnother.htm
      

  3.   

    楼上的,可能是我的意思没说明白,我是想将第一个Document的<AddrInfo>节点用第二个Document的<AddrInfo>节点给替换掉,这样第一个Document里还是只有一个<AddrInfo>节点。项目的实际需求里,一个Document只有一个<AddrInfo>节点。楼上的方法会使生成的最终的Document里有两个<AddrInfo>节点。而且,我想要保持生成的Document里的结构不变。大家帮帮忙呗,江湖救急啊~
      

  4.   

    呃,我把节点名字写错了,不是<AddrInfo>,应该是<Address>
      

  5.   

    我写的实现代码如下,可是在replaceChild()那一步的时候总是报错:
    public Document mergeCifDoc(Document pwcompany, Document pwlocation)
    throws Exception {
    Element root = pwlocation.getDocumentElement();
    NodeList locaAddr = root.getElementsByTagName("Address");
    Element rootComp = pwcompany.getDocumentElement();
    NodeList compAddr =  rootComp.getElementsByTagName("Address");

    Element element = (Element)locaAddr.item(0);
    Element element2 = (Element)compAddr.item(0);
       pwcompany.replaceChild(element, element2);
             }
    最后一步,在replaceChild的时候报的错误如下:
    org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
    at org.apache.xerces.dom.ParentNode.internalInsertBefore(Unknown Source)
    at org.apache.xerces.dom.ParentNode.replaceChild(Unknown Source)
    at org.apache.xerces.dom.CoreDocumentImpl.replaceChild(Unknown Source)
    at com.ibm.ccm.service.transformprovider.TransformProvider.mergeCifDoc(TransformProvider.java:109)
    at com.ibm.ccm.service.transformprovider.TransformProvider.main(TransformProvider.java:63)各位高手帮忙给看看啊,我实在是没辙了。最好是能给出解决问题的代码~~