检测文档中xml节点数的最佳方法是什么?以下是一些例子:
<Items>
<Timestamp></Timestamp>
<Item>
<ID>1</ID>
<ID>2</ID>
<ID>3</ID>
<ID>4</ID>
</Item>
<Item>
...
</Item>
</Items>
上面的示例有两个xml元素(2 Item
s),但是无法检测到,例如,通过计算根之后第一个元素的出现次数(Timestamp
)。
这是一个更传统的例子:
<Items>
<Item>
...
</Item>
<Item>
...
</Item>
</Items>
或者,一个更模糊的例子,可能只有一个元素(父元素“Items”) -
<Items>
<References>
...
</References>
<Talk>
...
</Talk>
</Items>
事先不知道结构,确定文档中xml节点数的最佳方法是什么?这里的语言并不重要,但更喜欢java或python。
答案 0 :(得分:3)
“根节点的重复主要子元素的数量。”虽然描述可以解释,但从我阅读的方式来看,您可以将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)
答案 1 :(得分:1)
&#34;在DOM中,XML文档中的所有内容都是节点。&#34;
在XML Node和Element中是不同的东西,你似乎可以互换使用它们。
从您的示例中,看起来您正在寻找&lt; Item&gt;标签(除非找不到,然后&lt; Items&gt;计为一个),而不是节点。那么只计算一下吗?
计算&lt; Item&gt;的数量Python中的标记,将XML加载到名为xml,fx:
的字符串中xml = '<Items><Item>...</Item><Item>...</Item></Items>'
xml.count('<Item>')
答案 2 :(得分:1)
我强烈建议使用正确的工具来完成任务,在本例中是XPath。使用XPath,计算元素节点(如果你的意思是&#34;节点&#34;)就像这样简单:
count(//*)
计算其他节点(例如属性)也同样容易。