2012-05-09 62 views
2
public static Node createNodeFromXMLString(String xml) throws SAXException, 
     IOException { 
    return builder.parse(new ByteArrayInputStream(xml.getBytes())) 
      .getDocumentElement(); 
} 


public static void main(String args[]){ 
    Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("server.xml"); 
    XPath xpath = XPathFactory.newInstance().newXPath(); 
    Node element = (Node)xpath.evaluate("/Server/Service/Connector[2]",document,XPathConstants.NODE); 
    String newNode = nodeToString(element).replace("port=\"8443\"", "port=\"8453\""); 
    Node parent = element.getParentNode(); 
    Node node = createNodeFromXMLString(newNode); 
    parent.removeChild(element); 
    document.importNode(node,true); 
    parent.appendChild(node);  
} 

附加一个节点,则抛出在线程“主” org.w3c.dom.DOMException中异常:WRONG_DOCUMENT_ERR:一个节点在不同的文档比创建它的一个使用。 at org.apache.xerces.dom.ParentNode.internalInsertBefore(Unknown Source) at org.apache.xerces.dom.ParentNode.insertBefore(Unknown Source) at org.apache.xerces.dom.NodeImpl.appendChild(Unknown Source )错误文件错误而在XML

回答

19

Document.importNode不会更改它所调用的节点。你应该改变这一行:

document.importNode(node,true); 

node = document.importNode(node,true); 

或者使用一个不同的变量:

Node importedNode = document.importNode(node, true); 
parent.appendChild(importedNode); 
+0

非常感谢。它节省了我的时间。 – kannanrbk