gpt4 book ai didi

xmllint 和 xpath 从 https ://mail. google.com/mail/feed/atom 解析 xml 数据

转载 作者:行者123 更新时间:2023-12-03 17:36:44 27 4
gpt4 key购买 nike

我从我的 gmail 帐户中获取了一些我想解析的 xml 数据。
xml 数据如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://purl.org/atom/ns#" version="0.3">
<title>Gmail - Inbox for @gmail.com</title>
<tagline>New messages in your Gmail Inbox</tagline>
<fullcount>54</fullcount>
<link rel="alternate" href="http://mail.google.com/mail" type="text/html"/>
<modified>2014-11-25T04:40:04Z</modified>
<entry>
<title>test</title>
<summary/>
...
</feed>

我希望获得所有条目的所有标题,例如:
xmllint --xpath '//feed/entry/title' myfile.xml

现在,我发现如果没有此 xmlns 信息,这将起作用。
但是有了 xmlns 信息,我得到了消息

XPath 集为空

我想要一个简单的 oneliner 来解析这个文件,而不必修改文件(删除 xmlns 部分)。

--> 编辑:感谢@Mathias,正确的在线人看起来像:
echo "setns x= http://purl.org/atom/ns#\nxpath/x:feed/x:entry/x:title/text()"

最佳答案

您可能知道您的输入 XML 位于默认命名空间中。您原来的 XPath 表达式:

xmllint --xpath '//feed/entry/title' myfile.xml

将永远不会成功找到命名空间中的元素。这就是 XPath 结果集为空的原因。

如果您绝对不愿意注册或声明命名空间,则以下表达式有效:
xmllint --xpath "//*[name() = 'feed']/*[name() = 'entry']/*[name() = 'title']" myfile.xml

如果您的输入 XML 包含前缀命名空间,则必须使用 local-name()而不是 name() .

另一种不是“简单单行器”的替代方法是在 shell 模式下使用 xmllint,将 namespace 与前缀一起注册并在 XPath 表达式中使用。见 this answer详情。这才是解决问题的正确方法。

关于xmllint 和 xpath 从 https ://mail. google.com/mail/feed/atom 解析 xml 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27119895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com