.net - XElement या LINQ के साथ XPath का उपयोग कैसे करें?




xml linq-to-xml (4)

निम्नलिखित एक्सएमएल पर विचार करें:

<response>
  <status_code>200</status_code>
  <status_txt>OK</status_txt>
  <data>
    <url>http://bit.ly/b47LVi</url>
    <hash>b47LVi</hash>
    <global_hash>9EJa3m</global_hash>
    <long_url>http://www.tumblr.com/docs/en/api#api_write</long_url>
    <new_hash>0</new_hash>
  </data>
</response>

मैं <hash> तत्व के मूल्य को प्राप्त करने के लिए वास्तव में एक छोटा रास्ता ढूंढ रहा हूं। मैंने कोशिश की:

var hash = xml.Element("hash").Value;

लेकिन यह काम नहीं कर रहा है। क्या XElement को XPath क्वेरी प्रदान करना संभव है? मैं इसे पुराने System.Xml फ्रेमवर्क के साथ कर सकता हूं, ऐसा कुछ कर रहा हूं:

xml.Node("/response/data/hash").Value

क्या LINQ नेमस्पेस में ऐसा कुछ है?

अद्यतन करें:

इसके साथ कुछ और बंद करने के बाद मुझे ऐसा करने का एक तरीका मिला जो मैं करने की कोशिश कर रहा हूं:

var hash = xml.Descendants("hash").FirstOrDefault().Value;

मुझे अभी भी यह देखने में दिलचस्पी होगी कि किसी के पास बेहतर समाधान है या नहीं?


LINQ से XML के साथ XPath का उपयोग करने के लिए System.Xml.XPath लिए एक उपयोग घोषणा जोड़ें, यह System.Xml.XPath के विस्तार विधियों को दायरे में लाएगा।

आपके उदाहरण में:

var value = (string)xml.XPathEvaluate("/response/data/hash");

आप XPath- जैसी संरचना बनाने के लिए तत्वों को चेन करने के लिए .lement () विधि का उपयोग कर सकते हैं।

आपके उदाहरण के लिए:

XElement xml = XElement.Parse(@"...your xml...");
XElement hash = xml.Element("data").Element("hash");

देखें, LINQ से XML के साथ व्यवहार करते समय आप वास्तविक वस्तु प्राप्त करने के लिए LINQ का उपयोग क्यों नहीं करते हैं।

Descendants पूरे तत्व से प्रत्येक तत्व पाते हैं और निर्दिष्ट वस्तुओं से मेल खाने वाली सभी वस्तुओं की सूची। तो आपके मामले में हैश वह नाम है जो इसे पाता है।

तो, करने के बजाय

var hash = xml.Descendants("hash").FirstOrDefault().Value;

मैं इस तरह अलग तोड़ दूंगा:

var elements = xml.Descendants("hash");
var hash = elements.FirstOrDefault();

if(hash != null)
 hash.Value // as hash can be null when default. 

इस तरह आप गुण भी प्राप्त कर सकते हैं, नोड तत्व आदि।

इस लेख को इसके बारे में स्पष्ट विचार प्राप्त करने के लिए जांचें ताकि इससे मदद मिल सके। http://www.codeproject.com/KB/linq/LINQtoXML.aspx मुझे आशा है कि यह आपकी मदद करेगा।


मैंने xpath उत्पन्न करने के लिए LINQesq ढांचे के साथ आने की कोशिश की है। यह आपको c # lambda अभिव्यक्तियों का उपयोग करके xpath का वर्णन करने देता है

var xpath = CreateXpath.Where(e => e.TargetElementName == "td" && e.Parent.Name == "tr");

var xpath = CreateXpath.Where(e => e.TargetElementName == "td").Select(e => e.Text);

सुनिश्चित नहीं है कि यह इस संदर्भ में सहायक है, लेकिन आप यहां दस्तावेज़ ढूंढ सकते हैं:

http://www.syntaxsuccess.com/viewarticle/how-to-create-xpath-using-linq





xelement