2009-02-12 13 views
23

यह मेरा स्रोत एक्सएमएल की संरचना है:एक्सएसएलटी - विशेषता द्वारा एक्सएमएल विशेषता का चयन कैसे करें?

<root> 
<DataSet Value="A"> 
<Data Value1="1" Value2="anythingA1" /> 
<Data Value1="2" Value2="anythingA2" /> 
<Data Value1="3" Value2="anythingA3" /> 
<Data Value1="4" Value2="anythingA4" /> 
<Data Value1="5" Value2="anythingA5" /> 
</DataSet> 
</root> 

जहाँ से मैं जैसे कुछ चर बनाना चाहते VALUE1 के साथ VALUE1 के साथ = "2" सभी और सभी से = "5" anythingA2 और myVar2 साथ myVar1 anythingA5 साथ परिणाम चाहिए

मेरे approch इस

<xsl:variable name="myVarA" select="/DataSet/Data/[@Value1='2']/@Value2" /> 

तरह लग रहा है लेकिन निश्चित रूप से काम नहीं कर रहा क्योंकि Value2 है Value1 का कोई बच्चा नहीं।

अग्रिम में किसी भी संकेत के लिए धन्यवाद!

उत्तर

44

बस Data के बाद स्लैश हटाने और पहले जोड़ें जड़:

<xsl:variable name="myVarA" select="/root/DataSet/Data[@Value1='2']/@Value2"/> 
+0

-1 यह रूट नोड –

+0

@Andrew Hare के बिना काम नहीं करता है: ठीक है। विस्तृत करने के लिए Quassnoi के लिए धन्यवाद, मैं पहले संशोधन पोस्ट करने के तुरंत बाद कनेक्शन खो दिया। – phihag

4

अपने xpath के साथ दो समस्याएं हैं - पहले आप Data उल्लेख phihag की तरह के बाद से बच्चे चयनकर्ता को दूर करने की जरूरत है। इसके अलावा आप अपने xpath में root शामिल करना भूल गए। यहाँ आप क्या करना चाहते हैं:

select="/root/DataSet/Data[@Value1='2']/@Value2" 
1

प्रयास करें इस

xsl:variable name="myVarA" select="//DataSet/Data[@Value1='2']/@Value2" /> 

'//' किसी भी गहराई में डेटासेट के लिए खोज करेंगे

0

मैं एक चर कि अंक बनाकर यह करना होगा उन नोड्स जिनके पास वैल्यू 1 में उचित मूल्य है, फिर टी

<xsl:variable name="myVarANode" select="root//DataSet/Data[@Value1='2']" /> 
<xsl:value-of select="$myVarANode/@Value2"/> 

हर किसी के उत्तर सही हैं - mo वास्तव में ठीक है क्योंकि मैंने आपके XPATH में अतिरिक्त स्लैश नहीं देखा है जो गड़बड़ कर देगा। फिर भी, यह भी काम करेगा, और विभिन्न चीजों के लिए काम कर सकता है, इसलिए इस विधि को अपने टूलबॉक्स में रखें।

+0

1, 2, 3 सामान hypothetical है? मैं एल्बम का नाम कलाकार एक कलाकार B> मिल गया है, और मैं सभी सिबलिंग कलाकारों का चयन और उन्हें एल्बम से जुड़े एक मध्यस्थ के मेज पर टाई, मेरे विशाल डेटाबेस से डुप्लिकेट कलाकारों बिना करने के लिए कोशिश कर रहा हूँ। कोई विचार? –

2

नोट: xpath की शुरुआत में // का उपयोग करना थोड़ा सीपीयू तीव्रता है - यह प्रत्येक नोड को एक मैच के लिए खोजेगा। एक और विशिष्ट पथ का उपयोग करना, जैसे कि रूट/डेटासेट एक तेज क्वेरी तैयार करेगा।

+4

चूंकि यह सवाल का जवाब नहीं देता है, यह ओपी के प्रश्न पर एक टिप्पणी होनी चाहिए। –

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