用于XML的Grep工具[关闭]


22

我正在寻找一个好的工具来对XML执行类似grep的操作 - 例如,仅提取某些属性。

Grep 本身无法处理它 - 任何DFA等效工具只能处理非递归匹配,而我的可能是递归的。

我试过xgrep,但它很不稳定,我想要一个稳定可靠的工具。

有什么建议?

编辑:我更喜欢在Linux下运行良好的开源工具。

Answers:


21

XMLStarlet(维基百科)是一个接近的命令行工具grep。它是开源软件(MIT许可证),在Linux和Windows上运行良好。

XMLStarlet网站将其描述如下。

XMLStarlet是一组命令行实用程序(工具),可以使用简单的shell命令集来转换,查询,验证和编辑XML文档和文件,就像使用UNIX grep,sed对纯文本文件一样。 awk,diff,patch,join等命令。

Debian / Ubuntu包被命名xmlstarlet但要注意:与manpage所说的相反,二进制文件xmlstarlet在Debian / Ubuntu中命名,而不是xml

SourceForge上还有Windows二进制文件。

有关一个不错的介绍,请参阅IBM的开始使用XMLStarlet


从第一个链接中删除尾部斜杠。
Bkkbrad

我无法让它工作......它永远不会匹配任何xpath,除了'/'(整个文档),这是非常无价值的:(
Hendy Irawan

@HendyIrawan - 你确定你不是在尝试使用xpath吗?(就像你的XML有一个你没有考虑的默认命名空间?)
Daniel Haley

我试图克隆它,但似乎存储库已被破坏。
Hola Soy Edu Feliz Navidad

5

各种语言的XPath语法最适合在xml中查找内容。事实上,xgrep制造商推荐的工具之一基本上是一个接受XPath输入的Perl XML解析器。


5

在Linux下运行的工具是xml_grep。它完全理解XML,而不是逐行工具。

xml_grep作为XML :: Twig包中的独立工具包含在内。grepping功能非常强大,因为它支持XPath规范。

示例命令行(从Triology数据转储中提取2月中旬之后编辑的帖子):

xml_grep -p --cond="row[@LastEditDate>'2010-02-14']"  posts.xml  > lateEditedPosts.xml

安装很简单。或

  • sudo cpan -i "XML::Twig",如下面引用的xml_grep食谱中所述。

要么


更多信息:

我发现xml_grep的最佳介绍是xml_grep cookbook,大约两页。其他:


我修复了一个断开的链接,但是三部曲数据转储链接也被破坏了。我会看到我能做什么。
Peter Mortensen


0

我建议不要在XML上使用类似grep的工具,而是使用库来解析XML。
你到底需要什么?任何编程语言?我认为如果你愿意为它编写一个程序,那么.NET内置的XML解析器很容易适应这项工作。

更新:对于Linux,一个众所周知的XML解析器库是libxml2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.