[英]How to detect number of xml nodes?
检测文档中xml节点数的最佳方法是什么? 这里有一些例子:
<Items>
<Timestamp></Timestamp>
<Item>
<ID>1</ID>
<ID>2</ID>
<ID>3</ID>
<ID>4</ID>
</Item>
<Item>
...
</Item>
</Items>
上面的示例有两个xml元素(2个Item
),但是无法检测到,例如,通过计算根之后第一个元素的出现次数( Timestamp
)。
这是一个更常规的示例,它可以:
<Items>
<Item>
...
</Item>
<Item>
...
</Item>
</Items>
或者,一个更模糊的示例,可能只有一个元素(父元素“ Items”)-
<Items>
<References>
...
</References>
<Talk>
...
</Talk>
</Items>
在不事先了解结构的情况下,确定文档中xml节点数的最佳方法是什么? 语言在这里无关紧要,但是更喜欢java或python。
“根节点重复的主要子元素的数量。” 尽管描述可以解释,但按照我的阅读方式,您可以将XML读入ElementTree,通过迭代枚举根节点,并使用collections.Counter
对其计数。
import xml.etree.ElementTree as ET
import collections
refdoc = """<Items>
<Timestamp></Timestamp>
<Item>
<ID>1</ID>
<ID>2</ID>
<ID>3</ID>
<ID>4</ID>
</Item>
<Item>
...
</Item>
</Items>"""
doc = ET.XML(refdoc)
counts = collections.Counter(elem.tag for elem in doc)
print(counts)
total = sum(count for count in counts.values() if count > 1)
print(total)
这导致
Counter({'Item': 2, 'Timestamp': 1})
2
您甚至可以将其压缩到更少的行中
total = sum(count for count in collections.Counter(
elem.tag for elem in ET.XML(refdoc)).values()
if count > 1)
“在DOM中,XML文档中的所有内容都是一个节点。”
在XML Node和Element中是不同的事物,您似乎可以互换使用它们。
从您的示例中,您似乎正在寻找<Item>标记(除非找不到任何标记,否则<Items>视为一个),而不是节点。 因此,简单地算一下?
要计算Python中<Item>标签的数量,请在名为xml fx的字符串中加载XML:
xml = '<Items><Item>...</Item><Item>...</Item></Items>'
xml.count('<Item>')
我强烈建议为任务使用正确的工具,在本例中为XPath。 使用XPath,对元素节点进行计数(如果这就是“节点”的意思)很容易:
count(//*)
同样,计算其他节点(例如属性)也很容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.