如何在xml中获取特定类型的节点属性

本文关键字:类型 节点 属性 获取 xml | 更新日期: 2023-09-27 18:10:09

我使用以下代码:

System.Xml.XmlDocument document = new System.Xml.XmlDocument();
document.Load(@"D:'Files'OCR'" + FileUpload1.FileName + ".xml");
if (document.HasChildNodes)
{
    StringBuilder sb = new StringBuilder();
    StringBuilder positions = new StringBuilder();
    XmlElement root = document.DocumentElement;
    XmlNodeList nodes = document.DocumentElement.SelectNodes("//char[@confidence]");
}

问题是document.DocumentElement.SelectNodes("//char[@confidence]")返回null。

当我编写以下代码时,结果就显示出来了。

int nodesCount = Document.DocumentElement.ChildNodes[0].ChildNodes.Count;

如何计算所有具有confidence属性的节点?

如何在xml中获取特定类型的节点属性

您可以使用XDocument和一些有效的LINQ:

XDocument doc = XDocument.Load(@"D:'Temp'file.xml");
int count = doc.Root.Descendants().Count(e => e.Attribute("confidence") != null);
Console.Write("Count:" + count);
Console.Read();
4

输出:

和我的文件。xml包含以下内容:

<something>
    <char confidence="1">
    </char>
    <char confidence="2">
    </char>
    <char confidence="3">
    </char>
    <notchar confidence="1">
    </notchar>
</something>

上面的代码检查属性"confidence"的所有后代。如果只需要名称为"char"的元素,可以使用以下命令:

int count = doc.Root.Descendants().Count(e => e.Name == "char" && e.Attribute("confidence") != null);
输出:

3