Grep和Sed等效于XML命令行处理

时间:2020-03-06 14:20:53  来源:igfitidea点击:

在执行Shell脚本时,通常数据将存储在单行记录的文件中,例如csv。用grepsed处理这些数据真的很简单。但是我必须经常处理XML,因此我真的很想一种通过命令行编写对XML数据的脚本访问方式。什么是最好的工具?

解决方案

一些有前途的工具:

  • nokogiri:使用XPath和CSS选择器在ruby中解析HTML / XML DOM
  • hpricot:已弃用
  • fxgrep:使用其自己的类似XPath的语法来查询文档。用SML编写,因此安装可能很困难。
  • LT XML:源自SGML工具的XML工具包,包括sggrep,sgsort,xmlnorm等。使用其自己的查询语法。该文档是非常正式的。 LT用C编写。XML2声称支持XPath,XInclude和其他W3C标准。
  • xmlgrep2:使用XPath进行简单而强大的搜索。使用XML :: LibXML和libxml2在Perl中编写。
  • XQSharp:支持XQuery,它是XPath的扩展。为.NET Framework而编写。
  • xml-coreutils:与GNU coreutils等效的Laird Breyer的工具包。在有关理想工具包应包含的内容的有趣文章中进行了讨论。
  • xmldiff:用于比较两个xml文件的简单工具。
  • xmltk:似乎没有在debian,ubuntu,fedora或者macports中包含软件包,自2007年以来没有发布过,并且使用了非便携式构建自动化。

xml-coreutils似乎是记录最好的文档,也是最面向UNIX的。

JEdi​​t有一个名为" XQuery"的插件,该插件提供XML文档的查询功能。

命令行还不行,但是行得通!

确定要对XML文件执行的操作,并创建一个脚本(可能在Python中,可能是在Perl中),该脚本通过使用供Shell脚本使用的参数来公开该功能。

我发现xmlstarlet在这种事情上非常擅长。

http://xmlstar.sourceforge.net/

大多数发行版存储库中也应该可用。入门教程在这里:

http://www.ibm.com/developerworks/library/x-starlet.html

完全取决于我们要执行的操作。

XSLT可能是要走的路,但是有一个学习曲线。尝试使用xsltproc并注意我们可以输入参数。

XQuery可能是一个很好的解决方案。 (相对)易于学习,并且是W3C标准。

我建议将XQSharp用于命令行处理器。

在Joseph Holsten的出色列表中,我添加了Perl库XML :: XPath随附的xpath命令行脚本。从XML文件提取信息的好方法:

xpath -q -e '/entry[@xml:lang="fr"]' *xml

还有" xml2"和" 2xml"对。它将允许普通的字符串编辑工具来处理XML。

例子。 q.xml:

<?xml version="1.0"?>
<foo>
    text
    more text
    <textnode>ddd</textnode><textnode a="bv">dsss</textnode>
    <![CDATA[ asfdasdsa <foo> sdfsdfdsf <bar> ]]>
</foo>

xml2 <q.xml

/foo=
/foo=   text
/foo=   more text
/foo=   
/foo/textnode=ddd
/foo/textnode
/foo/textnode/@a=bv
/foo/textnode=dsss
/foo=
/foo=    asfdasdsa <foo> sdfsdfdsf <bar> 
/foo=

xml2 &lt;q.xml | grep textnode | sed's!/ foo!/ bar / baz!' | 2xml

<bar><baz><textnode>ddd</textnode><textnode a="bv">dsss</textnode></baz></bar>

P.S.还有html2/2html