我编写了一个非常简单的xpath来解析某些内容的名称,但它既不工作也不抛出任何错误。在我看来,我没有做错任何事。有人可以告诉我为什么下面的xpath表达式不起作用?感谢您的任何意见。
我试过这样:
from lxml.html import fromstring
content='''
<Traveller>
<name>John</name>
<passnum>572014</passnum>
<addr>Florida</addr>
</Traveller>
<Traveller>
<name>Craig</name>
<passnum>516114</passnum>
<addr>Boston</addr>
</Traveller>
'''
root = fromstring(content)
for item in root.xpath("//Traveller/name/text()"):
print(item)
预期产出:
John
Craig
答案 0 :(得分:1)
如果您在lxml.html
解析后打印文档,您会看到所有元素名称都变为小写,这就是您尝试的xpath不起作用的原因:
....
>>> from lxml import html
>>> html.tostring(root)
'<span><traveller>\n <name>John</name>\n <passnum>572014</passnum>\n <addr>Florida</addr>\n </traveller>\n <traveller>\n <name>Craig</name>\n <passnum>516114</passnum>\n <addr>Boston</addr>\n </traveller>\n</span>'
并使用小写作品:
>>> for item in root.xpath("//traveller/name/text()"):
... print(item)
...
John
Craig
答案 1 :(得分:1)
正确/有效的xml / html文档应始终包含 root 标记/节点,即包含所有剩余节点的主要父标记。
正确的方法应如下:
from lxml.etree import fromstring
content='''
<travels>
<Traveller>
<name>John</name>
<passnum>572014</passnum>
<addr>Florida</addr>
</Traveller>
<Traveller>
<name>Craig</name>
<passnum>516114</passnum>
<addr>Boston</addr>
</Traveller>
</travels>
'''
root = fromstring(content)
for item in root.xpath("//Traveller/name/text()"):
print(item)
输出:
John
Craig