无法使用 xpath 从某些内容中获取名称

Unable to source name out of some content using xpath

我已经编写了一个非常简单的 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

如果您在 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

A proper/valid xml/html 文档应始终包含 root tag/node 即主要包含所有剩余节点的父标签。

正确的方法应该是这样的:

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