【问题标题】:one-liner xpath extraction command line tool单行 xpath 提取命令行工具
【发布时间】:2019-11-01 04:49:36
【问题描述】:
...
<div class="article_header">
...
<a href="abc" title="PDF">XXX</a>
...
</div>
...

鉴于上述 XML,我只想打印“abc”。我可以在 python 中使用 lxml 来做到这一点。但这涉及制作一个python程序。我想要更像一个衬里的东西(就像 awk 一个衬里比 python 更容易处理 TSV 文件)来提取这样的短信息。

有没有工具可以做到这一点?谁能告诉我最简单的方法是什么?

【问题讨论】:

  • 如何制作一个 Python 程序来执行您所描述的操作 - 接受输入和 XPath 并输出结果?要求工具推荐或其他场外资源超出了 Stack Overflow 的范围。
  • What topics can I ask about here? 明确表示,要求我们推荐或查找工具、软件库或其他场外资源的问题在这里是题外话。

标签: xml command-line lxml


【解决方案1】:

您可以使用xmlstarlet。它是一个用于查询 XML 文件的 linux 命令行工具。
对于您的示例,请使用

xmlstarlet sel -t -v "//div[@class='article_header']/a/@href" input.xml

输出是:

abc

【讨论】:

  • 我在尝试 html 文件时收到此错误Entity 'nbsp' not defined。如何让它知道 HTML 文件?还有一些像这样的错误:: XML declaration allowed only at the start of the document &lt;?xml version="1.0" encoding="UTF-8"?&gt; ^
  • &amp;nbsp; 不是标准的 XML 实体,而是 HTML 实体。您将问题标记为 XML 并且 xmlstarlet 不是 HTML 实用程序。所以,抱歉,这行不通。
  • 您的第二个错误“XML 声明只允许在文档的开头”是由 XML 声明前的空格引起的。去掉空格,错误就会消失。
  • 是否有一种工具可以对输入进行预过滤,使其对 xmlstarlet 有效?看来 xmlstarlet 太敏感太错误了。 lxml不是这样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2011-06-13
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多