2013-01-24 59 views
12

我发现搜索使用LINQ XML节点的答案,但我仅限于C#和.NET 2.搜索XML文件2

我想开一个XML文件( 〜50Kb,所有简单文本)并搜索具有特定值的属性name的所有<Tool>节点。

看起来好像XmlDocument.SelectNodes()可能是我在找的东西,但我不知道XPath。这是正确的方式,如果是这样的代码是什么样子?

回答

22

您可以XmlDocument.SelectNodes如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 
使用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

@John嗯,嗯,你可以在.Net2中在一些条件下使用它:请参阅http://weblogs.asp.net/shahar/archive/2008/01/23/use-c-3-features-from-c -2-and-net-2-0-code.aspx –

+2

这很好用,但XPath的答案更符合我的目的。 –