xml - Java DOM - Inserting an element, after another -


निम्न XML फ़ाइल को देखते हुए:

  & lt;? Xml संस्करण = "1.0" एन्कोडिंग = "UTF-8" & gt; & Lt; प्रक्रिया का नाम = "टेस्टएसवीजी 2" xmlns = "http://www.example.org" targetNamespace = "http://www.example.org" xmlns: xsd = "http://www.w3.org/2001 / XMLSchema "& gt; & LT; अनुक्रम & gt; & Lt; प्राप्त नाम = "प्राप्त करें 1" createInstance = "yes" / & gt; & Lt; असाइन करें नाम = "असाइन 1" / & gt; & Lt; इनवॉइस नाम = "अन्वोक 1" / & gt; & Lt; नाम असाइन करें = "असाइन 2" / & gt; & Lt; उत्तर नाम = "उत्तर 1" / & gt; & Lt; / अनुक्रम & gt; & Lt; / प्रक्रिया & gt;  

मैं एक निश्चित पहले से मौजूद तत्व के बाद & lt; अनुक्रम & gt; & lt; / अनुक्रम & gt; अंदर एक नया तत्व जोड़ना चाहता हूं । उदाहरण के लिए यदि मैं "Assign1" के बाद नोड जोड़ना चाहता हूं, तो नई एक्सएमएल को इसे पसंद करना चाहिए:

  & lt; अनुक्रम & gt; & Lt; प्राप्त नाम = "प्राप्त करें 1" createInstance = "yes" / & gt; & Lt; असाइन करें नाम = "असाइन 1" / & gt; & Lt; newtype name = "NewNode" / & gt; & Lt; इनवॉइस नाम = "अन्वोक 1" / & gt; & Lt; नाम असाइन करें = "असाइन 2" / & gt; & Lt; उत्तर नाम = "उत्तर 1" / & gt; & Lt; / अनुक्रम & gt;  

मुझे फ़ंक्शन में जावा डोम का उपयोग करके ऐसा करना है। फ़ंक्शन हस्ताक्षर को यह पसंद करना चाहिए:

  सार्वजनिक शून्य addActionDom (स्ट्रिंग नाम, स्ट्रिंग स्टेपटाइप, स्ट्रिंग चरणनाम)  

कहां:

  • नाम पूर्व-मौजूद तत्व है, जिसके बाद सम्मिलन किया जाएगा;
  • stepType डाला तत्व प्रकार है;

वर्तमान में मुझे जेडीएम, या किसी भी अन्य जावा XML लाइब्रेरी के साथ अनुभव का अभाव है;

  • stepName । क्या आप कृपया एक नमूना कोड दे सकते हैं, या एक ट्यूटोरियल पर मुझे इंगित कर सकते हैं जहां एक निश्चित तत्व के बाद एक सम्मिलन किया जाता है।

    यह अब तक का कोड है:

      सार्वजनिक शून्य addActionDom (स्ट्रिंग नाम, स्ट्रिंग स्टेपटाइप, स्ट्रिंग चरणनाम) {फ़ाइल xmlFile = नई फ़ाइल (पथ + "/ संसाधन /" + BPELFilename); DocumentBuilderFactory डीबीएफ = DocumentBuilderFactory.newInstance (); DocumentBuilder डीबी; कोशिश {/ * लोड XML * / db = dbf.newDocumentBuilder (); दस्तावेज़ डॉक्टर = डीबी। पार्स (एक्सएमएलफ़ाइल); doc.getDocumentElement () सामान्य ()।; / * प्रकार टैग भर में फिराना और * / के लिए (स्ट्रिंग cTag: typeTags) {नोडलिस्ट सीएनएल = doc.getElementsByTagName (cTag); के लिए (इंट आई = 0; आई & lt; cnl.getLength (); ++ i) {नोड cnode = cnl.item (i); अगर (cnode.getNodeType () == नोड। ELEMENT_NODE) ​​{एलिमेंट एमिल = (एलिमेंट) cnode; // 'elem' तत्व जिसके बाद सम्मिलन किया जाना चाहिए यदि (elem.getAttribute ("name")। बराबर (नाम)) {एलिमेंट newElement = doc.createElement (stepType); // एलिमेंट को नया एलेमेंट.सेटअट्रिब्यूट डालें ("नाम", चरणनाम); // कोड HERE}}}} / * संपादन को बचाएं / ट्रांसफार्मर ट्रांसफार्मर = ट्रांसफार्मरफैक्चर.न्यूइनस्टेंस () .नवीनट्रांसफ़ॉर्मर (); StreamResult परिणाम = नया स्ट्रीम रिजल्ट (नया FileOutputStream (पथ + "/ संसाधन /" + BPELFilename)); DOMSource स्रोत = नया DOMSource (डॉक्टर); ट्रांसफार्मर। ट्रांसफॉर्म (स्रोत, परिणाम); } पकड़ (अपवाद ई) {/ * ParserConfigurationException * / / * SAXException * / / * IOException * / / * ट्रांसफार्मर कॉन्फ़िगरेशन एक्सप्शन * / / * ट्रांसफार्मर एक्सपॉशन * / / * अपवाद * / ई.प्रिंटस्टैक्सट्रेस (); }}}}  
  • ठीक है, हारून डिगुल्ला ने मुझे गति के बारे में हरा दिया खुद को समझने के लिए भी उतना ही अच्छा था। मैं cnl.item (i + 1) का उपयोग नहीं किया लेकिन अगले सिबलिंग () :

      तत्व newElement = doc.createElement (stepType); // एलिमेंट को नया एलेमेंट.सेटअट्रिब्यूट डालें ("नाम", चरणनाम); Elem.getParentNode ()। InsertBefore (newElement, elem.getNextSibling ());  

    आप एक निर्दिष्ट सूचकांक पर नोड्स सम्मिलित नहीं कर सकते।

    और

    <पूर्व> एपेंड चाल्ड (नोड नोड) // बच्चों को दी गई सूची के अंत में दिए गए बच्चे को जोड़ता है। P>
      insertBefore (नोड नया, नोड बच्चा) // सूची में "नया" सम्मिलित करें, 'बच्चे' नोड से पहले।  

    यदि एक सम्मिलनएफ़टर (नोड नया, नोड बच्चे) पद्धति थी, तो यह आपके लिए बहुत आसान होगा। लेकिन दुर्भाग्य से ऐसा नहीं है।


    Comments

    Popular posts from this blog

    Eclipse CDT variable colors in editor -

    AJAX doesn't send POST query -

    wpf - Custom Message Box Advice -