2013-01-24 21 views
12

znalazłem odpowiedzi na poszukiwania węzłów XML przy użyciu LINQ, ale jestem ograniczony do C# z .NET 2.Szukaj plik XML dla węzłów o określonej wartości atrybutów w .NET 2

Chcę otworzyć plik XML pojedynczy (~ 50 KB, cały prosty tekst) i wyszukaj wszystkie węzły <Tool> z atrybutem name o określonej wartości.

Wygląda na to, że XmlDocument.SelectNodes() może być tym, czego szukam, ale nie znam XPath. Czy to jest właściwa droga, a jeśli tak, to jak będzie wyglądać kod?

Odpowiedz

22

Można użyć XPath w XmlDocument.SelectNodes takich jak 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 

Here można znaleźć dodatkowe próbki XPath

+1

Stara szkoła, nadal działa dobrze. –

1

że można zrobić coś takiego (dobrze, rustykalny, ale masz pomysł), stosując 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

Nie sądzę, 'var' jest .NET2, ale jest całkiem jasne. –

+0

@John Hmmm, cóż, możesz go używać w .Net2 pod pewnymi warunkami: zobacz http://weblogs.asp.net/shahar/archive/2008/01/23/use-c-3-features-from-c -2-and-net-2-0-code.aspx –

+2

działa to świetnie, ale odpowiedź XPath jest po prostu bardziej elegancka dla mojego celu. –

Powiązane problemy