xml – 如何从shell执行XPath one-liners?

前端之家收集整理的这篇文章主要介绍了xml – 如何从shell执行XPath one-liners?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一个包在那里,对于Ubuntu和/或CentOS,有一个命令行工具,可以执行XPath一行如foo // element @ attribute filename.xml或foo // element @ attribute< filename.xml并逐行返回结果? 我正在寻找的东西,将允许我只是apt-get安装foo或yum安装foo,然后只是工作的开箱即用,没有包装或其他适配必要的。 以下是接近的事例: Nokogiri。如果我写这个包装我可以调用包装如上所述的方式:
#!/usr/bin/ruby

require 'nokogiri'

Nokogiri::XML(STDIN).xpath(ARGV[0]).each do |row|
  puts row
end

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

#!/usr/bin/perl

use strict;
use warnings;
use XML::XPath;

my $root = XML::XPath->new(ioref => 'STDIN');
for my $node ($root->find($ARGV[0])->get_nodelist) {
  print($node->getData,"\n");
}

xpath from XML :: XPath返回太多的噪音, – NODE – 和attribute =“value”。

xml_grep from XML :: Twig不能处理不返回元素的表达式,因此不能用于提取属性值而不进行进一步处理。

编辑:

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

xmllint –xpath // element / @ attribute filename.xml返回attribute =“value”。

xmllint –xpath’string(// element / @ attribute)’filename.xml返回我想要的,但只有第一个匹配。

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

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:dyn="http://exslt.org/dynamic" extension-element-prefixes="dyn">
  <xsl:output omit-xml-declaration="yes" indent="no" method="text"/>
  <xsl:template match="/">
    <xsl:for-each select="dyn:evaluate($pattern)">
      <xsl:value-of select="dyn:evaluate($value)"/>
      <xsl:value-of select="'&#10;'"/>
    </xsl:for-each> 
  </xsl:template>
</xsl:stylesheet>

使用xsltproc –stringparam模式运行// element / @ attribute –stringparam value。 arbitrary-xpath.xslt filename.xml。

你应该尝试这些工具:

> xmlstarlet
> xmllint
> saxon-lint

xmllint自带libxml2-utils(可以作为交互式shell使用–shell开关)xmlstarlet是xmlstarlet。

萨克森 – lint使用SaxonHE 9.6是唯一运行XPath 3.x(复古兼容性),其他人运行XPath 1.x

例如:

xmllint --xpath '//element/@attribute' file.xml
xmlstarlet sel -t -v "//element/@attribute" file.xml
saxon-lint --xpath '//element/@attribute' file.xml

> xmlstarlet page
> man xmllint
> saxon-lint

原文链接:https://www.f2er.com/xml/294165.html

猜你在找的XML相关文章