考虑一下xml:
...
<DataType>
<name>AccountStatus</name>
<description>This field indicates the account status</description>
<ValidValue>
<value>A</value>
<description>Account is Active</description>
<name>ACTIVE</name>
</ValidValue>
<ValidValue>
<value>I</value>
<description>Account is Inactive</description>
<name>INACTIVE</name>
</ValidValue>
</DataType>
<DataType>
<name>
...
我想知道给定节点是否是叶子节点。 例如,“name”,“description”和“value”是叶节点。 “ValidValue”不是因为它包含子元素。
这就是我的尝试:
import libxml2
doc = libxml2.parseFile("data_types.xml")
xml_query = doc.xpathNewContext()
node_list = xml_query.xpathEval('/path/to/DataType')
for node in node_list:
print '%s' % k.get_children()
print '%s' % k.isText()
不知何故,get_children()和isText()表现得很奇怪。 isText()为“name”节点(?)返回0,我无法确定如何处理get_children()的输出。
当然,我可以将其他东西放到另一个xpath查询中并弄明白,但我怀疑应该有一种非常直接的方法来使用libxml2
这样做,这正是我正在寻找的。 p >
答案 0 :(得分:1)
我没有运行python libxml2,但我可以告诉你一些关于libxml2哲学的内容。文本内容被视为节点,类型为 text 的节点。因此,您不能依赖于叶节点的含义对孩子进行计数。
我认为您需要一个遍历所有子节点的函数,并测试是否存在元素类型的节点。没有元素孩子意味着成为一片叶子。