दिलचस्प पोस्ट
विंडोज कमांड लाइन में अलग-अलग रंगों के साथ कैसे गूंज एमएस विज़ुअल सी ++ में वीएलएएस (चर लंबाई एरेज़) को सक्षम करना? HTML कैनवास पर पाठ की ऊँचाई कैसे प्राप्त कर सकते हैं? एंड्रॉइड में दृश्यपेज नियंत्रक की गति धीमी जावास्क्रिप्ट सरणी से यादृच्छिक मूल्य प्राप्त करना गिट शाखा पहुंच को प्रतिबंधित करने का एक तरीका है? मैं जावास्क्रिप्ट में वर्तमान तारीख कैसे प्राप्त करूं? दिन के एक विशिष्ट समय पर जावास्क्रिप्ट फ़ंक्शन को कॉल करें संदर्भ द्वारा नए का रिटर्न वैल्यू असाइन करना बहिष्कृत है अल्पविराम से अलग किए गए कॉलम अलग पंक्तियों में विभाजित करें UIAppearance प्रॉक्सी के माध्यम से मैं किस गुणों को सेट कर सकता हूं? मुझे TypeError क्यों मिलता है: प्रकार 'फ्लोट' के गैर-इंट द्वारा अनुक्रम को गुणा नहीं कर सकता? हाइपरलिंक का उपयोग करते हुए एक बाहरी प्रोग्राम, जैसे नोटपैड को चलाने के लिए कैसे? आवेदन को संभालनेडिडबैकअक्टिव- "ऐप सक्रिय होने पर एक दृश्य नियंत्रक कैसे प्रतिक्रिया कर सकता है?" क्या यह PHP में ओवरलोड ऑपरेटरों के लिए संभव है?

डोम प्रसंस्करण के बाद एक्सएमएल गुणों का क्रम

जब मानक DOM के माध्यम से एक्सएमएल प्रसंस्करण करते हैं, तो आपको वापस क्रमबद्ध करने के बाद विशेषता ऑर्डर की गारंटी नहीं होती है। आखिरकार यह है कि मैं आउटपुट को सीरियल करने के लिए मानक जावा एक्सएमएल रूपांतरण एपीआई का उपयोग करते समय एहसास हुआ।

हालांकि मुझे एक आदेश रखने की आवश्यकता है मैं जानना चाहूंगा कि क्या जावा पर किसी भी तरह की संभावना है जो डीओएम एपीआई के माध्यम से संसाधित किए गए एक्सएमएल फ़ाइल के गुणों का मूल क्रम रखने के लिए, या ऑर्डर को मजबूर करने के लिए किसी भी तरह से हो सकता है (शायद एक वैकल्पिक सीरियलाइजेशन एपीआई का उपयोग करके जिससे आप इसे सेट कर सकते हैं संपत्ति की तरह) मेरे मामले में प्रसंस्करण गुणों के एक गुच्छा के साथ एक ही तत्व के अनुक्रम के कुछ विशेषताओं (सभी नहीं) के मूल्य को बदलने और शायद कुछ और तत्व डालें।

क्या कोई भी "आसान" तरीका है या क्या मुझे अपनी XSLT ट्रांसफ़ॉर्मेशन स्टाइलशीट को आउटपुट और संपूर्ण इनपुट XML फ़ाइल को निर्दिष्ट करने के लिए परिभाषित करना है?

अपडेट मुझे अपने सभी उत्तरों का धन्यवाद करना चाहिए। जवाब अब मुझे उम्मीद से ज्यादा स्पष्ट लगता है। मैंने ऑर्डर ऑर्डर करने के लिए कभी भी कोई ध्यान नहीं दिया, क्योंकि मुझे इसके पहले कभी ज़रूरत नहीं थी।

विशेषता क्रम की आवश्यकता के मुख्य कारण यह है कि परिणामस्वरूप XML फ़ाइल सिर्फ भिन्न दिखती है लक्ष्य एक विन्यास फाइल है जो सैकड़ों अलार्म रखता है (प्रत्येक अलार्म को विशेषताओं के सेट के द्वारा परिभाषित किया गया है)। इस फ़ाइल में आम तौर पर समय के साथ कुछ बदलाव होते हैं, लेकिन इसे आदेश देने के लिए सुविधाजनक है, क्योंकि जब हमें कुछ को संशोधित करने की आवश्यकता होती है, तब इसे हाथ से संपादित किया जाता है। अब और फिर कुछ परियोजनाओं को इस फ़ाइल के हल्के संशोधनों की आवश्यकता होती है, जैसे किसी ग्राहक विशेष कोड के लिए एक विशेषता सेट करना।

मैंने प्रत्येक परियोजना के विशिष्ट भागों (कुछ विशेषताओं के मूल्य को संशोधित करने) के साथ मूल फ़ाइल (सभी परियोजनाओं के लिए आम) को मर्ज करने के लिए एक छोटा सा एप्लिकेशन विकसित किया है, इसलिए परियोजना-विशिष्ट फ़ाइल को आधार एक (नई अलार्म परिभाषाएं या कुछ विशेषता बगफिक्स का मूल्य) अनुशंसित विशेषताओं की आवश्यकता के लिए मेरी मुख्य प्रेरणा, एक टेक्स्ट तुलन उपकरण (जैसे विंमरगे) के माध्यम से मूल फ़ाइल को फिर से आवेदन के रूप में जांचने में सक्षम हो सकती है। यदि प्रारूप (मुख्य रूप से ऑर्डर ऑर्डर) एक समान रहता है, तो अंतर आसानी से देखा जा सकता है।

मुझे वास्तव में सोचा था कि एक्सएमएल हेडलिंग प्रोग्राम्स जैसे एक्सएमएल जासूस जैसे आप XML फाइलों को संपादित कर सकते हैं और कुछ ऑर्डरिंग (ग्रिड मोड) को लागू कर सकते हैं। हो सकता है कि मेरा एकमात्र विकल्प इन प्रोग्रामों में से एक को मैन्युअल रूप से आउटपुट फाइल को संशोधित करने के लिए उपयोग करना है।

वेब के समाधान से एकत्रित समाधान "डोम प्रसंस्करण के बाद एक्सएमएल गुणों का क्रम"

कहने के लिए क्षमा करें, लेकिन जवाब "क्या आप नहीं कर सकते" या "पहले स्थान पर ऐसा करने की आवश्यकता क्यों है?" की तुलना में अधिक सूक्ष्म है।

संक्षिप्त उत्तर है "DOM आपको ऐसा करने की अनुमति नहीं देगा, लेकिन SAX होगा"

इसका कारण यह है कि डोम को ऑर्डर ऑर्डर के बारे में कोई परवाह नहीं है, क्योंकि मानक के संबंध में जहां तक ​​एक्सरसाइड का संबंध है, वहीं एक्सएसएल को इनपुट स्ट्रीम में पकड़ लेना चाहिए, यह जानकारी पहले ही खो गई है। अधिकांश एक्सएसएल इंजन वास्तव में इनपुट स्ट्रीम विशेषता आदेश को सुरक्षित रखता है (जैसे एक्सलान-सी (एक मामले को छोड़कर) या एक्सलन-जे (हमेशा))। खासकर यदि आप <xsl:copy*> उपयोग करते हैं

जिन मामलों में विशेषता क्रम नहीं रखा जाता है, मेरे ज्ञान का सबसे अच्छा तरीका है। – यदि इनपुट स्ट्रीम एक DOM – Xalan-C है: यदि आप अपने परिणाम-वृक्ष टैग को शाब्दिक रूप से सम्मिलित करते हैं (जैसे <elem att1={@att1} .../>

यहां एसएएक्स के साथ एक उदाहरण है, रिकॉर्ड के लिए (साथ ही साथ डीटीडी एनगिंग को रोकना)।

 SAXParserFactory spf = SAXParserFactoryImpl.newInstance(); spf.setNamespaceAware(true); spf.setValidating(false); spf.setFeature("http://xml.org/sax/features/validation", false); spf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false); spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); SAXParser sp = spf.newSAXParser() ; Source src = new SAXSource ( sp.getXMLReader(), new InputSource( input.getAbsolutePath() ) ) ; String resultFileName = input.getAbsolutePath().replaceAll(".xml$", ".cooked.xml" ) ; Result result = new StreamResult( new File (resultFileName) ) ; TransformerFactory tf = TransformerFactory.newInstance(); Source xsltSource = new StreamSource( new File ( COOKER_XSL ) ); xsl = tf.newTransformer( xsltSource ) ; xsl.setParameter( "srcDocumentName", input.getName() ) ; xsl.setParameter( "srcDocumentPath", input.getAbsolutePath() ) ; xsl.transform(src, result ); 

मैं कई नायकों के इरादे से कहना चाहता हूं कि ऐसे मामलों में जहां ऑर्डर ऑर्डर ऑर्डर होता है

प्रतिगमन परीक्षण एक स्पष्ट मामला है। जो भी नहीं, इतनी अच्छी तरह से लिखा लिखित एक्सएसएल को अनुकूलित करने के लिए कहा गया है, आप आमतौर पर यह सुनिश्चित करना चाहते हैं कि "नया" परिणाम पेड़ "पुराने" लोगों के समान या समान हैं। और जब परिणाम पेड़ लगभग दस लाख लाइनें हैं, तो एक्सएमएल एक्सआईएफ उपकरण बहुत बोझिल साबित होते हैं … इन मामलों में, विशेषता क्रम को संरक्षित करना बहुत मददगार है

उम्मीद है की यह मदद करेगा 😉

एक्सएमएल सिफारिश के खंड 3.1 को देखें। यह कहते हैं, "ध्यान दें कि स्टार्ट-टैग या रिक्त-तत्व टैग में विशेषता विनिर्देशों का क्रम महत्वपूर्ण नहीं है।"

यदि किसी सॉफ़्टवेयर के लिए किसी विशिष्ट क्रम में एक्सएमएल तत्व पर विशेषताओं की आवश्यकता होती है, तो यह सॉफ्टवेयर एक्सएमएल की प्रोसेसिंग नहीं कर रहा है, यह पाठ को संसाधित कर रहा है जो एक्सएमएल की तरह अप्रतिबंधित दिखता है। इसे तय करने की आवश्यकता है

यदि यह तय नहीं किया जा सकता है, और आपको अपनी आवश्यकताओं के अनुरूप फ़ाइलों को बनाना होगा, तो आप उन फ़ाइलों को बनाने के लिए मानक XML उपकरण का विश्वसनीय उपयोग नहीं कर सकते हैं उदाहरण के लिए, आप एक परिभाषित क्रम में विशेषताओं का निर्माण करने के लिए XSLT का उपयोग करने की कोशिश कर सकते हैं (जैसे आप सुझाव देते हैं), उदाहरण के लिए:

 <test> <xsl:attribute name="foo"/> <xsl:attribute name="bar"/> <xsl:attribute name="baz"/> </test> 

केवल यह जानने के लिए कि XSLT प्रोसेसर इस का उत्सर्जन करता है:

 <test bar="" baz="" foo=""/> 

क्योंकि DOM जो कि प्रोसेसर ऑर्डर विशेषताओं का उपयोग टैग नाम से वर्णानुक्रम में किया जाता है। (यह सामान्य है लेकिन XML DOMs के बीच सार्वभौमिक व्यवहार नहीं है।)

लेकिन मैं कुछ पर जोर देना चाहता हूं यदि सॉफ्टवेयर का एक टुकड़ा एक्सएमएल सिफारिशों का एक सम्मान में उल्लंघन करता है, तो शायद यह अन्य मामलों में इसका उल्लंघन करता है। यदि आप इसे गलत क्रम में विशेषता खिलाते हैं, तो यह टूट जाता है, यह शायद भी टूट जाता है यदि आप सिंगल उद्धरणों के साथ गुणों को सीमांकित करते हैं, या यदि विशेषता मानों में चरित्र संस्थाएं होती हैं, या किसी भी दर्जन अन्य चीजों में से कोई भी एक्सएमएल सिफारिश करता है कि एक XML दस्तावेज़ ऐसा कर सकते हैं कि इस सॉफ्टवेयर के लेखक शायद इसके बारे में नहीं सोचते थे

एक्सएमएल कैनोनिकल सिलेक्शन का परिणाम एक सुसंगत विशेषता क्रम में होता है, मुख्य रूप से किसी को कुछ या सभी एक्सएमएल पर हस्ताक्षर देख सकते हैं, हालांकि अन्य संभावित उपयोग हैं यह आपके उद्देश्यों के अनुरूप हो सकता है

रॉबर्ट रॉसनी ने अभी क्या कहा है, पर ज़्यादा जोर देना संभव नहीं है, लेकिन मैं कोशिश करूंगा 😉

अंतर्राष्ट्रीय मानकों का लाभ यह है कि, जब सब लोग उनका अनुसरण करते हैं, तो जीवन अच्छा है। हमारे सभी सॉफ़्टवेयर शांतिपूर्वक साथ होते हैं

एक्सएमएल हमारे सबसे महत्वपूर्ण मानकों में से एक है। यह एसओएपी जैसी "पुरानी वेब" सामान का आधार है, और फिर भी आरएसएस और एटम जैसी 'वेब 2.0' सामान। यह स्पष्ट मानकों के कारण है कि एक्सएमएल विभिन्न प्लेटफार्मों के बीच इंटरऑपरेट करने में सक्षम है।

अगर हम एक्सएमएल पर थोड़ी छोटी दे देते हैं, तो हम उस स्थिति में पहुंचेंगे जहां एक्सएमएल का एक उत्पादक यह नहीं मान सकेगा कि एक्सएमएल का उपभोक्ता उपभोक्ता को अपनी सामग्री के लिए सक्षम होगा। यह उद्योग पर एक आपत्तिजनक प्रभाव पड़ेगा।

हमें बहुत मजबूती से पीछे हटना चाहिए, जो कोई भी कोड लिखता है जो मानक के अनुसार एक्सएमएल की प्रक्रिया नहीं करता है। मैं समझता हूं कि, इन आर्थिक समय में, "नहीं" कहकर ग्राहकों और व्यावसायिक भागीदारों को अपमान करने की अनिच्छा है। लेकिन इस मामले में, मुझे लगता है कि इसके लायक है। अगर हम प्रत्येक व्यापारिक साझेदार के लिए हाथ-क्राफ्ट एक्सएम के लिए होते तो हम बहुत खराब वित्तीय स्थिति में होंगे।

इसलिए, "सक्षम" कंपनियों को नहीं जो XML समझते हैं उचित पंक्तियों के साथ, उन्हें मानक भेजें। उन्हें यह सोचने से रोकना होगा कि एक्सएमएल केवल उस कोण कोष्ठक के साथ पाठ है यह केवल उस में कोण कोष्ठक के साथ पाठ की तरह व्यवहार नहीं करता है

ऐसा नहीं है कि इसके लिए एक बहाना है। यहां तक ​​कि सबसे छोटा एंबेडेड डिवाइसेस में पूर्ण विशेषताओं वाले एक्सएमएल पार्सर कार्यान्वयन भी हो सकते हैं। मैंने अभी तक मानक एक्सएमएल को पार्स करने में सक्षम नहीं होने का एक अच्छा कारण नहीं सुना है, भले ही कोई पूरी तरह से विशेष रुप से प्रदर्शित DOM कार्यान्वयन नहीं कर सकता।

आपको वास्तव में किसी प्रकार के ऑर्डर रखने की आवश्यकता नहीं है। जहां तक ​​मुझे पता है, कोई भी स्कीमा खाते में ऑर्डर ऑर्डर नहीं लेता है, ऐसा लगता है कि दूसरे छोर पर एक्सएमएल प्रोसेस करने वाले जो भी हो, परिणाम को पार्स करने के लिए उचित डीओएम का उपयोग नहीं कर रहा है।

मुझे लगता है कि एक विकल्प मैन्युअल रूप से स्ट्रिंग बिल्डिंग का उपयोग करते हुए दस्तावेज़ को बनाने के लिए होगा, लेकिन मैं उस के खिलाफ दृढ़ता से अनुशंसा करता हूं

रॉबर्ट रॉसनी ने इसे अच्छी तरह से कहा: यदि आप विशेषताओं के आदेश पर भरोसा कर रहे हैं, तो आप वास्तव में XML प्रसंस्करण नहीं कर रहे हैं, बल्कि, ऐसा कुछ जो XML की तरह दिखता है

मैं ऑर्डर ऑर्डर देने के बारे में ध्यान क्यों दे सकता हूं, इस पर कम से कम दो कारणों के बारे में सोच सकता हूं अन्य हो सकते हैं, लेकिन कम से कम इन दो के लिए मैं सुझाव दे सकता हूं:

  1. आप एक ही नाम के गुणों के कई उदाहरणों का उपयोग कर रहे हैं:

     <foo myAttribute="a" myAttribute="b" myAttribute="c"/> 

    यह सिर्फ सादा अमान्य XML है; एक डोम प्रोसेसर संभवतः इन सभी मूल्यों में से एक को छोड़ देगा – यदि यह दस्तावेज बिल्कुल भी प्रक्रिया करता है इसके बजाय, आप बाल तत्वों का उपयोग करना चाहते हैं:

     <foo> <myChild="a"/> <myChild="b"/> <myChild="c"/> </foo> 
  2. आप मानते हैं कि किसी विशेष प्रकार का अंतर उन विशेषताओं पर लागू होता है जो पहले आते हैं। इसे स्पष्ट करें, या तो अन्य विशेषताओं के माध्यम से या बाल तत्वों के माध्यम से। उदाहरण के लिए:

     <foo attr1="a" attr2="b" attr3="c" theMostImportantAttribute="attr1" /> 

मुझे एक ही सटीक समस्या थी मैं एक्सएमएल गुणों को संशोधित करना चाहता था लेकिन अंतर की वजह से ऑर्डर करना चाहता था मैंने इसे हासिल करने के लिए स्टॉक इस्तेमाल किया। आपको XMLStreamReader और XMLStreamWriter (कर्सर आधारित समाधान) का उपयोग करना होगा। जब आप एक START_ELEMENT ईवेंट प्रकार प्राप्त करते हैं, तो कर्सर गुणों का सूचक रखता है इसलिए, आप उपयुक्त संशोधन कर सकते हैं और उन्हें "क्रम" में आउटपुट फाइल में लिख सकते हैं।

इस लेख / चर्चा को देखें आप देख सकते हैं कि क्रम में शुरुआती तत्वों के गुणों को कैसे पढ़ें।

आप जो भी मैं वर्णन कर रहा हूं, जैसे एक त्वरित और गंदे समाधान का उपयोग करके मानक DOM और Transformation API का उपयोग कर आप यह कर सकते हैं:

हम जानते हैं कि ट्रांसफ़ॉर्मेशन एपीआई समाधान वर्णानुक्रम में वर्णों के अनुसार ऑर्डर करता है। आप कुछ आसान-स्ट्रिप-बाद वाली स्ट्रिंग के साथ विशेषता नामों को उपसर्ग कर सकते हैं ताकि वे आपके इच्छित क्रम में आउटपुट हो सकें। ज्यादातर स्थितियों में "ए_" "बी_" आदि के रूप में सरल उपसर्गों को पर्याप्त होना चाहिए और एक लाइनर रीगेक्स का उपयोग करके आउटपुट एक्सएमएल से आसानी से छीन लिया जा सकता है।

यदि आप एक XML लोड कर रहे हैं और resave और गुणों को सुरक्षित रखने के लिए चाहते हैं, तो आप एक ही सिद्धांत का उपयोग कर सकते हैं, पहले इनपुट xml पाठ में विशेषता नाम संशोधित कर सकते हैं और फिर उसे दस्तावेज़ ऑब्जेक्ट में पार्स कर सकते हैं। दोबारा, इस संशोधन को XML के पाठ की प्रसंस्करण के आधार पर बनाएं। यह मुश्किल हो सकता है लेकिन फिर से, regex का उपयोग करके, तत्वों और उनकी विशेषता स्ट्रिंग्स का पता लगाकर किया जा सकता है। ध्यान दें कि यह एक गंदी समाधान है अपने आप में एक्सएमएल को पार्स करते समय बहुत सारे नुकसान होते हैं, यहां तक ​​कि कुछ के लिए भी उतना सरल है, इसलिए सावधान रहें, अगर आप इसे लागू करना चाहते हैं

काम की तरह …

 package mynewpackage; // for the method import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; // for the test example import org.xml.sax.InputSource; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.StringReader; import org.w3c.dom.Document; import java.math.BigDecimal; public class NodeTools { /** * Method sorts any NodeList by provided attribute. * @param nl NodeList to sort * @param attributeName attribute name to use * @param asc true - ascending, false - descending * @param B class must implement Comparable and have Constructor(String) - eg Integer.class , BigDecimal.class etc * @return */ public static Node[] sortNodes(NodeList nl, String attributeName, boolean asc, Class<? extends Comparable> B) { class NodeComparator<T> implements Comparator<T> { @Override public int compare(T a, T b) { int ret; Comparable bda = null, bdb = null; try{ Constructor bc = B.getDeclaredConstructor(String.class); bda = (Comparable)bc.newInstance(((Element)a).getAttribute(attributeName)); bdb = (Comparable)bc.newInstance(((Element)b).getAttribute(attributeName)); } catch(Exception e) { return 0; // yes, ugly, i know :) } ret = bda.compareTo(bdb); return asc ? ret : -ret; } } List<Node> x = new ArrayList<>(); for(int i = 0; i < nl.getLength(); i++) { x.add(nl.item(i)); } Node[] ret = new Node[x.size()]; ret = x.toArray(ret); Arrays.sort(ret, new NodeComparator<Node>()); return ret; } public static void main(String... args) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder; String s = "<xml><item id=\"1\" price=\"100.00\" /><item id=\"3\" price=\"29.99\" /><item id=\"2\" price=\"5.10\" /></xml>"; Document doc = null; try { builder = factory.newDocumentBuilder(); doc = builder.parse(new InputSource(new StringReader(s))); } catch(Exception e) { System.out.println("Alarm "+e); return; } System.out.println("*** Sort by id ***"); Node[] ret = NodeTools.sortNodes(doc.getElementsByTagName("item"), "id", true, Integer.class); for(Node n: ret) { System.out.println(((Element)n).getAttribute("id")+" : "+((Element)n).getAttribute("price")); } System.out.println("*** Sort by price ***"); ret = NodeTools.sortNodes(doc.getElementsByTagName("item"), "price", true, BigDecimal.class); for(Node n: ret) { System.out.println(((Element)n).getAttribute("id")+" : "+((Element)n).getAttribute("price")); } } } 

मेरे सरल परीक्षण में यह छापती है:

 *** Sort by id *** 1 : 100.00 2 : 5.10 3 : 29.99 *** Sort by price *** 2 : 5.10 3 : 29.99 1 : 100.00 

मुझे लगता है कि मैं विशेषता के आदेश की देखभाल के लिए कुछ मान्य औचित्य प्राप्त कर सकता हूं:

  • आप उम्मीद कर सकते हैं कि मनुष्य को मैन्युअल रूप से पढ़ना, निदान करना या एक समय या किसी अन्य समय में XML डेटा को संपादित करना है; उस उदाहरण में पठनीयता महत्त्वपूर्ण होगी, और गुणों की एक सुसंगत और तार्किक व्यवस्था उसमें मदद करती है;
  • आपको कुछ उपकरण या सेवा के साथ संवाद करना पड़ सकता है जो (प्रवेश की गलती से) आदेश के बारे में परवाह करता है; प्रदाता को अपने कोड को सही करने के लिए कहें, यह विकल्प नहीं हो सकता है: एक सरकारी एजेंसी से पूछने की कोशिश करें, जबकि इलेक्ट्रॉनिक रूप से इलेक्ट्रॉनिक दस्तावेजों का वितरण करने के लिए आपके उपयोगकर्ता की समय सीमा करीब-करीब घटती रहती है!

ऐसा लगता है कि एलन पनेटिएर के समाधान का रास्ता तय करना है।

इसके अलावा, आप DecentXML पर एक नज़र रखना चाह सकते हैं; यह आपको पूर्ण नियंत्रण देता है कि एक्सएमएल कैसे प्रारूपित है, भले ही यह DOM- संगत नहीं है विशेष रूप से उपयोगी यदि आप फॉर्मेटिंग को खोए बिना कुछ हाथ से संपादित XML को संशोधित करना चाहते हैं।

मेरे पास काफी समान समस्या है मुझे हमेशा पहले के लिए एक ही विशेषता की आवश्यकता है उदाहरण :

 <h50row a="1" xidx="1" c="1"></h50row> <h50row a="2" b="2" xidx="2"></h50row> 

बनना चाहिए

 <h50row xidx="1" a="1" c="1"></h50row> <h50row xidx="2" a="2" b="2"></h50row> 

मुझे एक रेगेक्स के साथ एक समाधान मिला:

 test = "<h50row a=\"1\" xidx=\"1\" c=\"1\"></h50row>"; test = test.replaceAll("(<h5.*row)(.*)(.xidx=\"\\w*\")([^>]*)(>)", "$1$3$2$4$5"); 

आशा है कि आप यह उपयोगी पाते हैं