如何从shell执行XPath一行程序?

有没有针对Ubuntu和/或CentOS的软件包,它有一个命令行工具,可以执行XPath一行程序,比如foo//[email protected]foo//[email protected]<filename.xml并逐行返回结果

我正在寻找一种可以让我只apt获得install fooyum install foo然后开箱即用的东西,无需包装或其他修改

以下是一些接近的例子:

诺科吉里。如果我写这个包装,我可以用上面描述的方式调用包装:

#/usr/bin/ruby
需要“nokogiri”
Nokogiri::XML(STDIN).xpath(ARGV[0])。每行|
划船
终止

XML::XPath。将使用此包装器:

#/usr/bin/perl
严格使用;
使用警告;
使用XML::XPath;
my$root=XML::XPath->新的(ioref=>“标准输入法”);
对于我的$node($root->find($ARGV[0])->get\u nodelist){
打印($node->getData,“\n”);
}

xpathfrom XML::xpath返回太多噪音,--节点--attribute=“value”

xml\u grepfrom xml::Twig无法处理不返回元素的表达式,因此无法在不进行进一步处理的情况下用于提取属性值

编辑:

echo cat//element/@attribute | xmllint--shell filename.xml返回类似于xpath的噪声

xmllint--xpath//element/@attributefilename.xml返回attribute=“value”

xmllint--xpath'string(//element/@attribute)'filename.xml返回我想要的内容,但只针对第一个匹配

对于另一个几乎可以满足这个问题的解决方案,这里有一个XSLT,可用于计算任意XPath表达式(需要在XSLT处理器中使用dyn:evaluate支持):

<?xml version=“1.0”?>
<xsl:stylesheet xmlns:xsl=”http://www.w3.org/1999/XSL/Transform“version=“1.0”
xmlns:dyn=”http://exslt.org/dynamic“扩展元素前缀=“dyn”>
<xsl:output-omit-xml-declaration=“yes”indent=“no”method=“text”/gt;
<xsl:template match=“/”>
<xsl:for each select=“dyn:evaluate($pattern)”>
<xsl:value of select=“dyn:evaluate($value)”/>
<xsl:select=“”
”的值/>
&lt/xsl:for each>
&lt/xsl:template>
&lt/xsl:stylesheet>

使用xsltproc--stringparam模式//元素/@属性--stringparam值运行。任意-xpath.xslt filename.xml

您应该尝试以下工具:

  • xmlstarlet:可以编辑、选择、转换。。。默认情况下未安装,xpath1
  • xmllint:默认情况下,通常与libxml2 utils、xpath1一起安装(请检查我的包装,使--xpath打开非常旧的版本和新行分隔的输出(v<2.9.9)
  • xpath:通过perl的模块XML::xpath,xpath1安装
  • xml\u grep:通过perl的模块安装xml::Twig,xpath1(有限的xpath使用)
  • xidel:xpath3
  • saxon lint:我自己的项目,在@Michael Kay的saxon-HE Java库上包装,xpath3

xmllint附带了libxml2 utils(可以用作带有--shell开关的交互式shell)

xmlstarletxmlstarlet

xpath随perl的模块XML::xpath

xml\u grep随perl的模块xml::Twig

xidelisxidel

saxon lint使用SaxonHE 9.6、XPath 3.x(+追溯兼容性)

例:

xmllint--xpath'//element/@attribute'file.xml
xmlstarlet sel-t-v“//element/@attribute”file.xml
xpath-q-e'//element/@attribute'file.xml
xidel-se'//element/@attribute'file.xml
saxon lint--xpath'//element/@attribute'file.xml
  • xmlstarlet页
  • 曼林特
  • xpath页面
  • xml_grep
  • 西德尔
  • 撒克逊皮棉

发表评论