java - Modify XML and remove old nodes with VTD-XML -


मेरे पास इस तरह की संरचना है:

  & lt; होटल & gt; & LT; होटल & gt; & Lt; नाम & gt; होटल 1 & lt; / नाम & gt; & LT; Phone1 & gt; 11,111-1 & lt; / Phone1 & gt; & LT; Phone2 & gt; 11,111-2 & lt; / Phone2 & gt; & Lt; / होटल & gt; & LT; होटल & gt; & Lt; नाम & gt; होटल 2 & lt; / नाम & gt; & LT; Phone1 & gt; 22,222-1 & lt; / Phone1 & gt; & LT; Phone2 & gt; 22,222-2 & lt; / Phone2 & gt; & Lt; / होटल & gt; ... & lt; / होटल & gt;  

और मैं इस तरह एक संरचना रखने के लिए हर फोन नंबर को संशोधित करना चाहता हूं:

  & lt; फोन & gt; & LT; संख्या & gt; 11,111-1 & lt; / संख्या & gt; & Lt; / फोन & gt;  

मैं संख्या निकालने और नए नोड्स का निर्माण कर रहा हूं। लेकिन मुझे नहीं पता कि मुझे कौन से बिंदु पुराने Phone1 और Phone2 नोड्स को निकाल देना चाहिए।

मेरा कोड:

  VTDGen vg = नया VTDGen (); vg.setDoc (बाइट); vg.parse (सही); VTDNav vn = vg.getNav (); ऑटोपियाट एपी = नया ऑटोपियालट (वीएन); स्ट्रिंग पथ = "/ होटल / होटल"; ap.selectXPath (पथ); सूची के & lt; StringBuilder & gt; NewNodes = नया अर्रेलिस्ट & lt; स्ट्रिंगबिइल्डर & gt; (); Int count = 0; // पहले जब-पाश: सभी नंबरों को निकालें और नए नोड्स का निर्माण करते समय (ap.evalXPath ()! = -1) {StringBuilder newNode = new StringBuilder (); प्रत्येक होटल VTDNav vn2 = vn.cloneNav (2) में 2 फोन नंबरों की वजह से (इंट आई = 1; आई और एलटी; = 2; आई ++) {2 बार; ऑटोपियाट एपी 2 = नया ऑटोपियालॉट (वीएन 2); // फोन नंबर एपी 2 निकालें। SelectXPath ("फ़ोन" + i); If (ap2.evalXPath () == -1) {continue; } Int textIndex = vn2.getText (); If (textIndex == -1) {continue; } स्ट्रिंग फोन = vn2.toString (textIndex); एपेंड (फोन) .append ("& lt; / संख्या & gt;") .append ("& lt; / फोन & gt;"); newNode.append ("& lt; फोन & gt;") .append ("& lt; संख्या & gt; } NewNodes.add (गिनती, नया नोड); गिनती ++; } // अब एक्सएमएल XMLModifier xm = नया XMLModifier (vn) को संशोधित करने का समय है; ap.selectXPath (पथ); गणना = 0; // दूसरा समय-पाश: बनाए गए नोड्स डालें (ap.evalXPath ()! = -1) {xm2.insertBeforeTail (newNodes.get (count) .toString ()); गिनती ++; } VTDNav संशोधित Vn = xm.outputAndReparse ();  

मैंने निकालने और दो-छोरों में डालने को विभाजित किया है, क्योंकि @ vtd-xml- लेखक ने कहा कि यह सिर्फ एक बार reparse करने के लिए और अधिक कुशल है।

मैं पुराने फोन नोड्स को निकालने का पता लगाने में सक्षम नहीं है और ऐसा करने का बेहतर तरीका भी होना चाहिए या नहीं?


Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -