当节点标记具有变量名时,如何获取节点的innertext

时间:2013-11-05 04:42:07

标签: c# xml xpath

我有一个xml文件,标签名称就像这样

<PhysicalDrive0>
</PhysicalDrive0>
....
<PhysicalDrive8>
</PhysicalDrive8>

此处物理驱动器的数量未知或可能有所不同。因此我无法手动查找

等节点
xmlDoc.SelectNodes("../PhysicalDrive0");

所以我认为将某些正则表达式合并为一件事会更好。到目前为止,我搜索的内容主要是处理属性。

我试过

XmlNodeList list = xmlDoc.SelectNodes("..//*[starts-with(name(),'PhysicalDrive')]");
            Console.WriteLine("list count "+list.Count);

这给了我一个0的计数。

请帮忙。

由于

2 个答案:

答案 0 :(得分:0)

local-name()更好地使用name()。您可能在name()函数中遇到名称空间(前缀)问题。如果您从文档根目录开始,请使用//而不是..//。您最终得到以下xpath:

//*[starts-with(local-name(),'PhysicalDrive')]

答案 1 :(得分:0)

您可以使用System.Xml.Linq

var xDoc = XDocument.Load("input.xml");
var list = xDoc.Descendants()
    .Where(e =>
        e.Name.LocalName.StartsWith("PhysicalDrive"))
    .Select(e => e.Value)
    .ToList();