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() の出力をどうするかはよくわかりませんでした。

libxml2確かに、別の xpath クエリに何かをハッキングしてそれを理解することはできますが、私が探しているものを使用してこれを行うための非常に簡単な方法があるはずです。

4

1 に答える 1

1

私は python libxml2 を実行していませんが、libxml2 の哲学について少しお話しできます。テキスト コンテンツはノード、つまりテキスト型のノードとして扱われます。したがって、葉ノードの意味で子の数に依存することはできません。

すべての子ノードをウォークし、タイプelementのノードがあるかどうかをテストする関数が必要だと思います。要素の子がないということは、葉であることを意味します。

于 2012-11-05T20:28:08.800 に答える