检测文档中 xml 节点数量的最佳方法是什么?以下是一些示例:
<Items>
<Timestamp></Timestamp>
<Item>
<ID>1</ID>
<ID>2</ID>
<ID>3</ID>
<ID>4</ID>
</Item>
<Item>
...
</Item>
</Items>
上面的示例有两个 xml 元素(2 Item
),但是无法检测到,例如,通过计算根之后第一个元素的出现次数(时间戳
)。
这是一个更传统的示例,可以:
<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)
关于java - 如何检测xml节点的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34466854/