我正在尝试使用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)
答案 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文档。