0

考虑这段 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>
 ...

我想知道给定节点是否是叶节点。例如,“名称”、“描述”和“值”是叶节点。“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() 为“名称”节点 (?) 返回 0,我不知道如何处理 get_children() 的输出。

当然,我可以将某些东西破解到另一个 xpath 查询中并弄清楚,但我怀疑应该有一种非常直接的方法来使用libxml2,这就是我正在寻找的。

4

1 回答 1

1

我没有运行 python libxml2,但我可以告诉你一些关于 libxml2 的哲学。文本内容被视为一个节点,一个文本类型的节点。所以你不能依靠 children 来计算你的叶子节点的含义。

我认为您需要一个函数来遍历所有子节点并测试是否存在element类型的节点。没有元素子元素意味着成为叶子。

于 2012-11-05T20:28:08.800 回答