使用xpath将结果“组合”为节点条目

时间:2012-03-12 12:45:50

标签: python xml xpath

我正在尝试使用xpath解决问题 /实现。使用代码(python)当然也是可能的,但我更喜欢在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
  等

这有可能以任何可能的方式进行吗?或者我只是在python中使用xmldocument解析器? (使用来自lxml的etree)

2 个答案:

答案 0 :(得分: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>]

AFAIK,XPath用于选择节点,而不是将它们组合在一起,所以我认为它不能完成所有工作。

答案 1 :(得分:0)

考虑使用XQuery,它是XPath的超集,并允许您构造包含结构化信息的新XML文档。