当前位置: 首页 > 知识库问答 >
问题:

如何从shell中执行XPath单行程序?

卫子平
2023-03-14

野姑娘。如果我编写了这个包装器,我可以按照上面描述的方式调用包装器:

#!/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");
}

XML::XPath中的XPath返回太多噪声、--node--attribute=“value”

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

xmllint--xpath//element/@attribute filename.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" 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 pattern//element/@attribute--StringParam value运行。任意-xpath.xslt filename.xml

共有1个答案

秋煌
2023-03-14

您应该尝试以下工具:

  • XMLStarlet:可以编辑、选择、转换...默认情况下未安装,xpath1
  • XMLLint:通常默认情况下与libxml2-utils、xpath1一起安装(检查我的包装器是否在非常旧的版本和换行分隔输出(v<2.9.9)
  • 上具有 --XPath开关
  • XPath:通过Perl的模块XML::XPath,XPath1
  • 安装
  • xml_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_grep附带了Perl的模块xml::twig

例:

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页面
  • man xmllint
  • XPath页
  • xml_grep
  • 喜德尔
  • 撒克逊-林特

.

 类似资料:
  • 问题内容: 我尝试谷歌搜索答案,但没有运气。 我需要使用我的超级计算机服务器,但是要运行我的python脚本,必须通过shell脚本执行。 例如我要执行 如何做到这一点? 问题答案: 只需确保python可执行文件在PATH环境变量中,然后在脚本中添加 细节: 在文件job.sh中,放入 执行此命令以使脚本可运行: 运行 :

  • 问题内容: 我有一个使用WINE在Linux上运行的Windows程序。 如何从Windows程序调用Linux Shell命令? 问题答案: 编辑:user1182474的评论是正确的; Wine不会隔离它运行的程序。(它试图隐藏它,但不是很彻底。)我完全无法使用Google。Psen在下面的评论更正确,并引用了FAQ。(请注意,要使其正常工作,您可能需要通过Wine驱动器映射获得程序的目录。或

  • 问题内容: 我需要从Django Shell执行Python脚本。我试过了: 但这没有用。只是在等我写东西。 问题答案: 该<<部分有误,请<改用: 你也可以这样做: 对于python3,你需要使用

  • 我需要从Django shell执行一个Python脚本。我试过: 但是没有成功。它只是在等我写些什么。

  • 问题内容: 如何在Linux中从C执行Shell脚本? 问题答案: 这取决于您要对脚本(或要运行的任何其他程序)执行的操作。 如果只想运行脚本,这是最容易的事情,但是它也做其他一些事情,包括运行shell并让其运行命令(在大多数* nix下是/ bin / sh)。 如果您要通过标准输入来输入shell脚本或使用其标准输出,则可以使用(和)设置管道。这也使用外壳程序(大多数* nix下是/ bin

  • 我有一个案例,我想问我可以解决与Spring壳。我有一个Main.jar应用程序,它有几个部署在Wildly服务器上的Spring任务。在我的例子中,我不能停止或重新部署main.jar,因为必须不停地提供服务。