考虑XML片段:如何确定节点是否是libxml2中的叶节点?
...
<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
这是我正在寻找的。
你不能使用'lxml'作为libxml的包装器吗? –
嗨@Jon,我在有限的环境中工作; 'libxml2'是可用的,但不是'lxml'。 我可以在本地安装,但其他人试图运行我的代码将不得不一样,这是我想避免的。 –