2009-06-12 4 views
6

निम्न XML को देखते हुए:XMLSearch के साथ XML तत्व के भीतर खोज करने का सही या गलत तरीका?

<cfsavecontent variable="xml"> 
<root> 
    <parent> 
     <child>I'm the first</child> 
     <child>Second</child> 
     <child>3rd</child> 
    </parent> 
    <parent> 
     <child>Only child</child> 
    </parent> 
    <parent> 
     <child>I'm 10</child> 
     <child>I'm 11!</child> 
    </parent> 
</root> 
</cfsavecontent> 

इस हर माता-पिता से अधिक पाश का सबसे अच्छा तरीका है और फिर उस माता पिता से सभी बच्चों को निकालने?

<cfset xml = XMLParse(Trim(xml))> 

<cfset parents = XMLSearch(xml, "//parent")> 

<cfloop array="#parents#" index="parent"> 

    <cfset parent = XMLParse(parent)><!--- Is this needed? ---> 

    <cfset children = XMLSearch(parent, "//child")> 

    <cfloop array="#children#" index="child"> 
     <cfoutput>#child.XmlText#</cfoutput> 
    </cfloop> 

</cfloop> 

कारण मैं पूछता हूँ क्योंकि मैं कभी नहीं किया है वर्तमान XML तत्व से सभी बच्चे तत्वों को निकालने के लिए सक्षम किया गया है।

'क्या यह आवश्यक है?' टिप्पणी आगे बढ़ने वाली रेखा को हाइलाइट करती है जिसे मैंने आगे बढ़ने के लिए काम किया है। लेकिन क्या इस लाइन को हटाना संभव है और किसी भी तरह 'XMLSearch (parent, "// child")' को केवल 'मूल' से बाल तत्व प्राप्त करने के लिए बदलना संभव है?

धन्यवाद।

+0

+1 - यह वास्तव में एक तरह से जवाबी सहज है कि सीएफ प्रतीत नहीं होता है XmlSearch() में सम्मान संदर्भ। – Tomalak

उत्तर

8
<cfset parent = XMLParse(parent)><!--- Is this needed? ---> 

नहीं, ऐसा नहीं है। यह एक प्रदर्शन जुर्माना भी है क्योंकि आप इस तरह एक नया डोम बनाते हैं।

आपको XmlSearch() से एक्सएमएल नोड्स की एक सरणी मिलती है (आप <cfloop array... का उपयोग क्यों करेंगे?)। इसका मतलब यह है इन बराबर होना चाहिए:

<!-- new CF8 syntax --> 
<cfloop array="#parents#" index="parent"> 
    <cfdump var="#parent#"> 
</cfloop> 

<!-- old syntax --> 
<cfloop from="1" to="#ArrayLen(parents)#" index="i"> 
    <cfdump var="#parents[i]#"> 
</cfloop> 

जब एक नोड खोज ColdFusion सम्मान संदर्भ बनाने के लिए, तुम क्या करने की जरूरत है:

XMLSearch(parent, ".//child") 
-------------------^ 

आप "//" के साथ एक XPath अभिव्यक्ति शुरू करते हैं, ColdFusion स्पष्ट रूप से पूरे खोज दस्तावेज नोड से संबंधित है, न कि नोड के वंशज।

लेकिन अगर आप दस्तावेज़ से सभी<child> तत्वों outputting में रुचि रखते हैं, यही कारण है कि इस के बजाय ऐसा नहीं:

<cfset children = XMLSearch(xml, "//child")> 
+0

हाँ, मुझे वह मिलता है, लेकिन जब उन अभिभावक नोड्स पर लूपिंग होता है तो मैं प्रत्येक के भीतर खोजना चाहता हूं। मैं इस लाइन का एक संस्करण के साथ आने में असमर्थ रहा है ... ... इसलिए मैंने सोचा कि, बारी से 'माता-पिता' एक XML तत्व, एक XML दस्तावेज़ में और फिर XPath आसान है। –

+0

क्षमा करें, आपके पहले मसौदे के आधार पर टिप्पणी की। मैं सभी बाल तत्व चाहता हूं, लेकिन केवल वर्तमान माता-पिता के लिए। –

+0

लूप में ".//child" की खोज करने का प्रयास करें। "// बच्चा" करना स्पष्ट रूप से दस्तावेज़-व्यापी खोज को ट्रिगर करता है, जबकि "।" से शुरू होता है। सम्मान संदर्भ। – Tomalak

संबंधित मुद्दे