有没有针对Ubuntu和/或CentOS的软件包,它有一个命令行工具,可以执行XPath一行程序,比如foo//[email protected]或foo//[email protected]<;filename.xml并逐行返回结果
我正在寻找一种可以让我只apt获得install foo或yum 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=“”&;#10;”的值/>;
</xsl:for each>;
</xsl:template>;
</xsl:stylesheet>;
使用xsltproc--stringparam模式//元素/@属性--stringparam值运行。任意-xpath.xslt filename.xml
您应该尝试以下工具:
xmlstarlet:可以编辑、选择、转换。。。默认情况下未安装,xpath1xmllint:默认情况下,通常与libxml2 utils、xpath1一起安装(请检查我的包装,使--xpath打开非常旧的版本和新行分隔的输出(v<;2.9.9)xpath:通过perl的模块XML::xpath,xpath1安装xml\u grep:通过perl的模块安装xml::Twig,xpath1(有限的xpath使用)xidel:xpath3saxon lint:我自己的项目,在@Michael Kay的saxon-HE Java库上包装,xpath3
xmllint附带了libxml2 utils(可以用作带有--shell开关的交互式shell)
xmlstarlet是xmlstarlet
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
- 西德尔
- 撒克逊皮棉