加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 08:17:27 所属栏目:百科 来源:网络整理
导读:有一个包在那里,对于Ubuntu和/或CentOS,有一个命令行工具,可以执行XPath一行如foo // element @ attribute filename.xml或foo // element @ attribute filename.xml并逐行返回结果? 我正在寻找的东西,将允许我只是apt-get安装foo或yum安装foo,然后只是
有一个包在那里,对于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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读