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