/ / एक xml में एक विशिष्ट नोड का मान पढ़ें - xml, linq-to-xml

एक एक्सएमएल - xml, linq-to-xml में एक विशिष्ट नोड का मान पढ़ें

मेरे पास एक एक्सएमएल फ़ाइल है:

<Item>
<Season>01</Season>
<EpisodeNumber>01</EpisodeNumber>
<EpisodeTitle>Title</EpisodeTitle>
</Item>

हर टैग इस xml में ठीक एक बार मौजूद होता हैफ़ाइल। मैं Linq का उपयोग करके एक लेबल में एपिसोड शीर्षक लिखना चाहता हूं। ऐसा करने का सबसे आसान तरीका क्या है? मैं वास्तव में नोड का नाम जानता हूं और यह केवल एक बार मौजूद है। यह किसी भी छोरों या कुछ के लिए बिना काम करना चाहिए, इसे नहीं करना चाहिए?

मैंने कुछ इस तरह से सोचा:

XDocument xml = XDocument.Load(xmlPath);
string info = xml.Elements("EpisodeName").Value;
label1.Text = info;

लेकिन एलिमेंट्स का कोई तरीका नहीं है।

यह एक काम करता है, लेकिन क्या मैं इसे कम लाइनों में लिख सकता हूं?

XDocument xml = XDocument.Load(xmlPath);
var info = xml.Descendants("EpisodeName");
foreach (string line in info)
{
label1.Text = line;
}

उत्तर:

जवाब के लिए 0 № 1

वापसी का मूल्य Elements() एक अनुक्रम (मूल्यों की एक श्रृंखला) है, यही कारण है कि यह नहीं है Value संपत्ति। यदि आप जानते हैं कि अधिकतम एक मूल्य पर होगा, तो आप उपयोग कर सकते हैं First() या FirstOrDefault() उस मूल्य का चयन करने के लिए यहाँ एक छोटा कार्यक्रम है जो "शीर्षक" मूल्य को बाहर निकालता है:

static void Main()
{
// I am loading the value from a string just for example; you can do XDocument.Load instead
var xml = @"
<Item>
<Season>01</Season>
<EpisodeNumber>01</EpisodeNumber>
<EpisodeTitle>Title</EpisodeTitle>
</Item>";
var xdoc = XDocument.Parse(xml);

// this is the statement which extracts the first EpisodeTitle xml element without iterating
var titleElem = xdoc.Root
.Elements("EpisodeTitle")
.FirstOrDefault();

// check to makes sure the element exists before calling .Value
label1.Text = (titleElem == null) ? string.Empty : titleElem.Value;
}

मैं आमतौर पर उपयोग करना पसंद करता हूं FirstOrDefault() यदि कोई संभावना है कि मान xml से गायब है; अन्यथा First() एक अपवाद फेंक देंगे।

यदि आप अशक्त के लिए जाँच करना पसंद नहीं करते हैं (और आप 1-लाइनर की तलाश कर रहे हैं), तो आप इसका उपयोग कर सकते हैं DefaultIfEmpty() मूल्य का चयन करने के बाद:

label1.Text = xdoc.Root.Elements("EpisodeTitle2").Select(e => e.Value).DefaultIfEmpty().FirstOrDefault();