为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这个解析器找不到使用命名空间前缀的 XML 标记的内容?

为什么这个解析器找不到使用命名空间前缀的 XML 标记的内容?

MYYA 2022-06-22 15:28:13
我有这个 XML 代码,来自这个链接:<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:nyt="http://www.nytimes.com/namespaces/rss/2.0" version="2.0">  <channel>    <item>      <title>‘This Did Not Go Well’: Inside PG&amp;E’s Blackout Control Room</title>      <dc:creator>Ivan Penn</dc:creator>      <pubDate>Sat, 12 Oct 2019 17:03:11 +0000</pubDate>    </item>  </channel></rss>当我尝试使用lxml并遵循xpath 和 XML namespaces 的文档对其进行解析时,解析器会找到标题(不使用命名空间),但不会找到作者/创建者,它会:from lxml import htmlxml = """<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:nyt="http://www.nytimes.com/namespaces/rss/2.0" version="2.0">  <channel>    <item>      <title>‘This Did Not Go Well’: Inside PG&amp;E’s Blackout Control Room</title>      <dc:creator>Ivan Penn</dc:creator>      <pubDate>Sat, 12 Oct 2019 17:03:11 +0000</pubDate>    </item>  </channel></rss>"""rss = html.fromstring(xml)items = rss.xpath("//item")for item in items:    title = item.xpath("title")[0].text_content().strip()    print(title)    ns = {"dc" : "http://purl.org/dc/elements/1.1/"}    authors = item.xpath("dc:creator", namespaces = ns)    print(authors)此代码打印:这并不顺利':在 PG&E 的停电控制室内 []由于它正确地找到了标题标签的内容,我认为它正在寻找单个<item>标签。我将命名空间传递给的方式有问题xpath吗?编辑:无论我是否使用斜杠,结果都是相同的,即ns = {"dc" : "http://purl.org/dc/elements/1.1/"}ns = {"dc" : "http://purl.org/dc/elements/1.1"}
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

HTML 解析器忽略名称空间。这是lxml 文档的Running HTML doctests部分的最后一句话:

HTML 解析器明显忽略了名称空间和其他一些 XMLisms。

文档的另一部分说:

另请注意,HTML 解析器旨在解析 HTML 文档。对于 XHTML 文档,使用可识别名称空间的 XML 解析器。

如果你改变它会起作用

authors = item.xpath("dc:creator", namespaces = ns)

authors = item.xpath("creator")

但由于 RSS 不是 HTML,请考虑使用 XML 解析器 ( from lxml import etree)。


查看完整回答
反对 回复 2022-06-22
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信