ऐसी कुछ तकनीकें हैं जिनका आप प्रयास कर सकते हैं; जो आप उपयोग करते हैं, वह इस बात पर निर्भर करेगा कि आपको दस्तावेज़ से बाहर निकलने के लिए कितनी जानकारी चाहिए, आप कितना कठोर होना चाहते हैं, और आप जिस XPath कार्यान्वयन का उपयोग कर रहे हैं उसके अनुरूप है।
किसी विशेष उपसर्ग से जुड़े नामस्थान यूआरआई प्राप्त करने का एक तरीका namespace::
धुरी का उपयोग कर रहा है। यह आपको एक नामस्थान नोड देगा जिसका नाम उपसर्ग है और जिसका मूल्य नामस्थान यूआरआई है। उदाहरण के लिए, यदि आप डिफ़ॉल्ट नाम स्थान यूआरआई मिल सकता है पथ का उपयोग कर दस्तावेज़ तत्व पर:
/*/namespace::*[name()='']
आप उपयोग करने के लिए है कि अपने XPathNavigator के लिए नाम स्थान संघों की स्थापना के लिए सक्षम हो सकता है। चेतावनी दी जानी चाहिए कि namespace::
अक्ष XPath 1.0 के उन कोनों में से एक है जिसे हमेशा लागू नहीं किया जाता है।
उस नामस्थान को प्राप्त करने का दूसरा तरीका यूआरआई दस्तावेज़ तत्व पर namespace-uri()
फ़ंक्शन का उपयोग करना है (जिसे आपने हमेशा कहा है कि उस नामस्थान में होगा)। अभिव्यक्ति:
namespace-uri(/*)
आपको वह नामस्थान देगा।
एक विकल्प उस नामस्थान के साथ उपसर्ग को जोड़ने के बारे में भूलना होगा, और बस अपना पथ नाम-मुक्त बनाएं। आप local-name()
फ़ंक्शन का उपयोग कर ऐसा कर सकते हैं जब भी आपको उस तत्व का संदर्भ लेना पड़ेगा जिसका नामस्थान आप नहीं जानते हैं।
//*[local-name() = 'Element']
आप एक कदम आगे जाने के लिए और दस्तावेज़ तत्व में से एक के खिलाफ तत्व का नाम स्थान यूआरआई का परीक्षण, यदि आप वास्तव में चाहते थे सकता है::
//*[local-name() = 'Element' and namespace-uri() = namespace-uri(/*)]
एक अंतिम विकल्प, यह देखते हुए कि उदाहरण के लिए नेमस्पेस का मतलब आपके लिए कुछ भी नहीं है, यह आपके एक्सएमएल को ऐसे फ़िल्टर के माध्यम से चलाने के लिए होगा जो नेमस्पेस को स्ट्रिप्स करता है। तब आपको अपने XPath में उनके बारे में चिंता करने की ज़रूरत नहीं होगी। ऐसा करने का सबसे आसान तरीका नियमित अभिव्यक्ति के साथ xmlns
विशेषता को निकालना होगा, लेकिन यदि आप एक ही समय में अन्य tidying करना चाहते हैं तो आप कुछ और जटिल कर सकते हैं।
क्या ये हमेशा डिफ़ॉल्ट नामस्थान में हैं? या आपके पास कभी है: xmlns: myns = "namepace-uri" क्या आप फ़ाइलों को पूरी तरह से एक DOM दस्तावेज़ में पढ़ते हैं या XmlValidatingReader जैसे किसी का उपयोग करके पार्स पढ़ते हैं? – Kev
वे हमेशा डिफ़ॉल्ट नामस्थान में रहते हैं। मैं पूरी तरह से फाइल नहीं पढ़ रहा हूं, क्योंकि मैं इस मामले में फंस गया हूं; मुझे लगता है कि जब आप "डीओएम दस्तावेज़ में या XmlValidatingReader की तरह कुछ का उपयोग करके पार्स" पूछते हैं तो मैं पूरी तरह समझ नहीं पा रहा हूं; मैं XML पढ़ने के लिए केवल XPath का उपयोग करूंगा; क्या यह बुरा है? –