2013-01-24 33 views
12

मैं LINQ का उपयोग कर एक्सएमएल नोड्स खोज के लिए जवाब मिल गया है, लेकिन मैं नेट के साथ सी # करने के लिए सीमित कर रहा हूँ 2.खोजें एक्सएमएल फ़ाइल 2

मैं एक एकल एक्सएमएल फ़ाइल को खोलने के लिए चाहते हैं (~ 50 केबी, सभी साधारण पाठ) और विशेषता name विशेषता के साथ सभी <Tool> नोड्स के लिए एक विशिष्ट मान रखते हैं।

ऐसा लगता है कि XmlDocument.SelectNodes() ऐसा हो सकता है जो मैं ढूंढ रहा हूं, लेकिन मुझे XPath नहीं पता। क्या यह सही तरीका है और यदि ऐसा है तो कोड कैसा दिखता है?

उत्तर

22

आप इस तरह के SelectNodes("//ElementName[@AttributeName='AttributeValue']")

<root> 
    <element name="value1" /> 
    <element name="value2" /> 
    <element name="value1" /> 
</root> 

XmlDocument xDoc = new XmlDocument(); 
// Load Xml 

XmlNodeList nodes = xDoc.SelectNodes("//element[@name='value1']"); 
// nodes.Count == 2 
रूप XmlDocument.SelectNodes में XPath का उपयोग कर सकते

Here आप कुछ अतिरिक्त XPath नमूने पा सकते हैं

+1

पुराना स्कूल, अभी भी ठीक काम करता है। –

1

लगता है कि आप ऐसा ही कुछ कर सकता है (अच्छी तरह से, देहाती, लेकिन आप विचार मिल गया है) का उपयोग कर GetElementsByTagName

var myDocument = new XmlDocument(); 
myDocument.Load(<pathToYourFile>); 
var nodes = myDocument.GetElementsByTagName("Tool"); 
var resultNodes = new List<XmlNode>(); 
foreach (XmlNode node in nodes) 
{ 
    if (node.Attributes != null && node.Attributes["name"] != null && node.Attributes["name"].Value == "asdf") 
    resultNodes.Add(node); 
} 
+0

मुझे नहीं लगता कि 'var' .NET2 है लेकिन यह बहुत स्पष्ट है। –

+0

@ जॉन हम्म, ठीक है, आप इसे कुछ शर्तों के तहत .NET2 में उपयोग कर सकते हैं: http://weblogs.asp.net/shahar/archive/2008/01/23/use-c-3-features-from-c देखें -2-और-नेट-2-0-code.aspx –

+2

यह बहुत अच्छा काम करता है लेकिन XPath उत्तर मेरे उद्देश्य के लिए और अधिक सुरुचिपूर्ण है। –