2012-03-12 14 views
0

問題/implementationをxpathで解決しようとしています。コード(パイソン)を使用することももちろん可能ですが、私は右 xpathを使用してノードの結果として 'combine'結果を返します。

可能であればXPathの でそれを行うことを好む、私は少しこのようなXMLファイルを持っていると言う:

<?xml version="1.0" encoding="UTF-8"?> 
<dir> 
    <results> 
     <entrylist> 
      <entry> 
       <type>document</type> 
       <name>a file name 1</name> 
       <date>2012-01-01</date> 
       <size>65421316516</size> 
      </entry> 
      <entry> 
       <type>document</type> 
       <name>a file name 2</name> 
       <date>2012-01-02</date> 
       <size>6542131</size> 
      </entry> 
      <entry> 
       <type>document</type> 
       <name>a file name 3</name> 
       <date>2012-01-03</date> 
       <size>654</size> 
      </entry> 
     </entrylist> 
    </results> 
</dir> 

xmlのレイアウトを変更できません
このXMLから、各エントリの名前と日付を抽出する必要があります。私は、xpath関数によって返される結果に型/サイズなしで一緒にグループ化する方がやや好きです。

ので、それをまとめるために、私は少しこのようになります(たい)出力が必要です。

[0]
を| - 名前:ファイル名1
| - 日付:2012-01-01

[1]
| - 名前:ファイル名2
| - 日付:2012-01-02
など

これは可能な方法でも可能ですか?または私はちょうどxmldocumentパーサーをPythonで使用しているのですか? (lxmlのからetreeを使用して)

答えて

1

私は、これはあなたが希望するものであるわからないんだけど、:

In [1]: from lxml.etree import parse 

In [2]: tree = parse('/tmp/test.xml') 

In [3]: for entry in tree.xpath('/dir/results/entrylist/entry'): 
    ...:  print entry.xpath('name|date') 
    ...: 
[<Element name at 0x2ce7d70>, <Element date at 0x2ce7dc0>] 
[<Element name at 0x2ce7dc0>, <Element date at 0x2ce7c30>] 
[<Element name at 0x2ce7c30>, <Element date at 0x2ce7d70>] 

は私の知る限り、XPathはそれらを組み合わせることではない、ノードを選択するためのものであるので、私はそれを考えていませんあなたのためにすべての仕事をすることができます。

+0

これはまさに私が欲しいものです。乾杯! –

+0

喜んで助けてください。また、 'for'ループの中でクエリを単純化しました。 'child ::' _Axis_の使用は冗長に見えます。 –

0

XPathのスーパーセットであるXQueryを使用して、構造化された情報を含む新しいXMLドキュメントを作成することを検討してください。

関連する問題