मेरे पास एक प्रोजेक्ट है जहां मैं कुछ विशेष रूप से बदसूरत "लाइव" एचटीएमएल ले रहा हूं और इसे एचटीएमएल एजिलिटी पैक के साथ एक औपचारिक एक्सएमएल डोम में मजबूर कर रहा हूं। मैं जो करने में सक्षम होना चाहता हूं, उसके बाद लिंक से एक्सएमएल के साथ इस पर सवाल पूछता हूं ताकि मैं जिस बिट्स की ज़रूरत हो, उसे बाहर निकाल सकूं। मैं HtmlDocument को XDocument में पार्स करने के लिए here वर्णित विधि का उपयोग कर रहा हूं, लेकिन इस पर क्वेरी करने का प्रयास करते समय मुझे यकीन नहीं है कि नामस्थान कैसे प्रबंधित करें। एक विशेष दस्तावेज़ में मूल HTML वास्तव में खराब निम्नलिखित टैग के साथ एक्सएचटीएमएल स्वरूपित किया गया था:लिंक से एक्सएमएल पर पूछताछ करते समय आप मनमाने ढंग से नेमस्पेस कैसे प्रबंधित करते हैं?
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
जब इस दस्तावेज़ ऐसा लगता है कि नाम स्थान विशेषता मेरे जैसे कुछ करने से रोक रहा है से क्वेरी करने के लिए कोशिश कर रहा है:
var x = xDoc.Descendants("div");
// returns null
स्पष्ट रूप से उन "div" टैग के लिए केवल स्थानीय नाम "div" है, लेकिन उचित टैग नाम नामस्थान प्लस "div" है। मैं एक्सएमएल नामस्थान के मुद्दे पर कुछ शोध करने की कोशिश की है और ऐसा लगता है कि मैं इस तरह से पूछताछ की नाम स्थान बायपास कर सकते हैं:
var x =
(from x in xDoc.Descendants()
where x.Name.LocalName == "div"
select x);
// works
बहरहाल, यह एक नहीं बल्कि hacky समाधान की तरह लगता है और ठीक से नाम स्थान को संबोधित नहीं करता मुद्दा। जैसा कि मैं समझता हूं कि एक उचित एक्सएमएल दस्तावेज़ में कई नामस्थान हो सकते हैं और इसलिए इसे संभालने का उचित तरीका उन नामस्थानों को पार्स करना है जिन्हें मैं पूछताछ कर रहा हूं। क्या किसी और को कभी ऐसा करना पड़ा है? क्या मैं इसे जटिल बनाने का रास्ता बना रहा हूं? मुझे पता है कि मैं एचटीएमएल दस्तावेज़ के साथ चिपके हुए और XPath के साथ पूछताछ करके इन सब से बच सकता हूं, लेकिन यदि संभव हो तो मैं जो भी जानता हूं (लिंक) के साथ रहूंगा और मैं यह भी जानना चाहूंगा कि मैं आगे नामस्थान के लिए खुद को स्थापित नहीं कर रहा हूं- सड़क से संबंधित मुद्दों।
इस स्थिति में नामस्थानों से निपटने का सही तरीका क्या है?
XLINQ API :(के बारे में यह सबसे कष्टप्रद बात है। नामस्थानों को अनदेखा करने के लिए बस इसे बताने के लिए एक तरीका होना अच्छा होगा, या कम से कम एक डिफ़ॉल्ट निर्दिष्ट करें। – MichaelGG