2010-01-29 8 views
19

इस XML दस्तावेज़ को देखते हुए की विशेषता मान प्राप्त करने के लिए:XQuery/XPath का उपयोग करते हुए एक तत्व की मूल नोड

<?xml version="1.0" encoding="UTF-8"?> 
    <mydoc> 
     <foo f="fooattr"> 
      <bar r="barattr1"> 
       <baz z="bazattr1">this is the first baz</baz> 
      </bar> 
      <bar r="barattr2"> 
       <baz z="bazattr2">this is the second baz</baz> 
      </bar> 
     </foo> 
    </mydoc> 

जाता है कि इस XQuery द्वारा कार्रवाई की जा रही:

let $d := doc('file:///Users/mark/foo.xml') 
let $barnode := $d/mydoc/foo/bar/baz[contains(@z, '2')] 
let $foonode := $barnode/../../@f 
return $foonode 

मैं निम्नलिखित त्रुटि मिलती है:

"Cannot create an attribute node (f) whose parent is a document node". 

ऐसा लगता है कि ../ आपरेशन प्रकार का दस्तावेज़ के बाकी हिस्सों से मिलान नोड्स को हटा रहा है इस तरह के यह है कि लगता है कि यह दस्तावेज़ नोड है।

मैं अन्य दृष्टिकोणों के लिए खुला हूं लेकिन माता-पिता का चयन एक निश्चित उप-स्ट्रिंग वाले बच्चे विशेषता पर निर्भर करता है।

चीयर्स!

उत्तर

30

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

आप शायद विशेषता ही

return data($foonode) 
+0

दरअसल मैंने किया था के बजाय विशेषता के मान वापस जाने के लिए चाहते थे! बहुत बहुत धन्यवाद। –

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