2010-07-14 12 views
12

यहाँ में कुछ तत्व से पहले/के बाद एक्सएमएल में सम्मिलित कर सकते कैसे मेरे कोड है, हो सकता है आप अभी मैं क्या याद कर रहा हूँ देखेंगे:मैं तत्व जावा

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = domFactory.newDocumentBuilder(); 
Document doc = builder.parse(fileName)); 

XPathFactory factory = XPathFactory.newInstance(); 
XPath xpath = factory.newXPath(); 
XPathExpression expr = xpath.compile("//CustomerId"); 

Object result = expr.evaluate(doc, XPathConstants.NODESET); 
Nodelist nodes = (NodeList) result; 
Text a = doc.createTextNode("value"); 
Element p = doc.createElement("newNode"); 
p.appendChild(a); 

for (int i = 0; i < nodes.getLength(); i++) { 
    nodes.item(i).insertBefore(p, nodes.item(i)); 
} 

मैं नए नोड डालने के लिए (कोशिश कर रहा हूँ <newNode>value</newNode>) ग्राहक आईडी मौजूदा नोड से पहले।

<Customer> 
    <names> 
     <firstName>fName</firstName> 
     <lastName>lName</lastName> 
     <middleName>nName</middleName> 
     <nickName/> 
    </names> 
    <addressList> 
     <address> 
      <streetInfo> 
       <houseNumber>22</houseNumber> 
       <baseName>Street base name</baseName> 
       <district>kewl district</district> 
      </streetInfo> 
      <zipcode>22231</zipcode> 
      <state>xxx</state> 
      <country>xxxz</country> 
      <primary>true</primary> 
     </address> 
    </addressList> 
    <CustomerId/> 
    <SSN>561381</SSN> 
    <phone> 
     <homePhone>123123123</homePhone> 
     <officePhone/> 
     <homePhone>21319414</homePhone> 
    </phone> 
    <preferred>true</preferred> 
</Customer> 

यह एक अपवाद फेंका हो रही मैं सिर्फ और क्या प्रयास करने के लिए पता नहीं है है: यहाँ मेरी एक्सएमएल नमूना फ़ाइल है

NOT_FOUND_ERR: एक प्रयास संदर्भ एक में एक नोड के लिए किया जाता है संदर्भ जहां यह मौजूद नहीं है।

उत्तर

27

यहाँ एक उदाहरण मैं सिर्फ एक्सएमएल नमूना आपके द्वारा दी गई का उपयोग कर परीक्षण किया गया।

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<Customer> 
    <names> 
     <firstName>fName</firstName> 
     <lastName>lName</lastName> 
     <middleName>nName</middleName> 
     <nickName/> 
     </names> 
    <addressList> 
     <address> 
      <streetInfo> 
       <houseNumber>22</houseNumber> 
       <baseName>Street base name</baseName> 
       <district>kewl district</district> 
       </streetInfo> 
      <zipcode>22231</zipcode> 
      <state>xxx</state> 
      <country>xxxz</country> 
      <primary>true</primary> 
      </address> 
     </addressList> 
    <newNode>value</newNode> 
<CustomerId/> 
    <SSN>561381</SSN> 
    <phone> 
     <homePhone>123123123</homePhone> 
     <officePhone/> 
     <homePhone>21319414</homePhone> 
     </phone> 
    <preferred>true</preferred> 
</Customer> 

आप रुचि रखते हैं, यहाँ मैं परिणाम दिखाने के लिए इस्तेमाल नमूना कोड:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
domFactory.setIgnoringComments(true); 
DocumentBuilder builder = domFactory.newDocumentBuilder(); 
Document doc = builder.parse(new File("XmlTest.xml")); 

NodeList nodes = doc.getElementsByTagName("CustomerId"); 

Text a = doc.createTextNode("value"); 
Element p = doc.createElement("newNode"); 
p.appendChild(a); 

nodes.item(0).getParentNode().insertBefore(p, nodes.item(0)); 

यहाँ परिणाम है

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 

StreamResult result = new StreamResult(new StringWriter()); 
DOMSource source = new DOMSource(doc); 
transformer.transform(source, result); 

String xmlOutput = result.getWriter().toString(); 
System.out.println(xmlOutput); 
+0

सहायक ... .. !!! –

5

मुझे लगता है कि आप, माता पिता में सम्मिलित करना चाहते हैं बच्चे नहीं:

nodes.item(i).getParentNode().insertBefore(p, nodes.item(i)); 
संबंधित मुद्दे