2012-05-09 12 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(不明なソース) at org.apache.xerces.dom.ParentNode.insertBefore(不明なソース) at org.apache.xerces.dom.NodeImpl.appendChild(不明なソース)間違った文書エラーXMLで

答えて

19

Document.importNodeそれが呼び出されたノードは変更されません。あるいは、

node = document.importNode(node,true); 

document.importNode(node,true); 

別の変数を使用します:あなたは、この行を変更する必要があり

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

おかげで多くのことを。それは私の時間を節約する。 – kannanrbk

関連する問題