gpt4 book ai didi

c# - 如何计算 XML 中具有相同 innertext 值的节点数

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:17 25 4
gpt4 key购买 nike

我正在编写 C# 代码。我的 XML 文档带有不同的节点,我需要计算其中具有相同 innertext 值的节点数。我正在使用 XmlDocument。假设我有一个 xml 文件,我必须在其中计算具有 InnerText 值 BSS 的节点数。

代码:

<Annotations>
<Objects>
<ObjectId>BSS</ObjectId>
<ObjectId>CAT</ObjectId>
</Objects>
<Objects>
<ObjectId>BSS</ObjectId>
<ObjectId>ABC</ObjectId>
</Objects>
<Objects>
<ObjectId>BSS</ObjectId>
<ObjectId>PCT</ObjectId>
</Objects>
</Annotations>

在上面的代码中,我想计算具有 innertext 值 BSS 的节点数。就像这里的计数应该是 3。非常感谢您的帮助。

编辑代码:

<Annotations>
<Objects>
<ObjectId>BSS|SAF|PAT</ObjectId>
<ObjectId>CAT</ObjectId>
</Objects>
<Objects>
<ObjectId>BSS|SAF|PAT</ObjectId>
<ObjectId>ABC</ObjectId>
</Objects>
<Objects>
<ObjectId>BSS|SAF|PAT</ObjectId>
<ObjectId>PCT</ObjectId>
</Objects>
</Annotations>

最佳答案

如果您将它加载为 XmlDocument,您可以这样做

doc.selectNodes("//*[.='BSS']").Count;

虽然我认为可能有一种更有效的方式来编写 XPath,但匹配所有内容然后检查它的文本内容感觉它可能效率很低。

如果那是一份完整且有代表性的文件,那么你可以这样做

doc.selectNodes("Annotations/Objects/ObjectId[.='BSS']").Count;

这会更有效率,因为它针对的是特定元素而不是整个文档。

如果搜索文本包含在竖线 (|) 分隔列表中,您可以使用此谓词代替 [.='BSS']:

[contains(concat('|',.,'|'),'|BSS|')]

虽然这样会慢一些。就个人而言,我建议无论您的来源来自何处,都应将其修改为将此列表分成单独的元素,这将使查询数据变得更加容易。我坚决主张 XML 文档应遵循与数据库遵循的“第一范式”规则相同的原则,并且不在任何一个文本节点/属性中包含多个值。

关于c# - 如何计算 XML 中具有相同 innertext 值的节点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25664938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com