jjzjj

xml - 来自命令行的 Saxon-HE 9.6 的换行符分隔输出

coder 2024-06-29 原文

有没有办法在 Saxon-HE 9.6 的多个匹配节点上获取换行符分隔的输出?

我使用这个名为 saxon-lint 的包装器:

#!/bin/bash

java -cp /path/to/saxon9he.jar net.sf.saxon.Query -s:"$2" -qs:"$1" !method=text

示例:

文件.xml

<house_pet_hazards>
  <hazard type="cleanup">
    <name>hairballs</name>
    <guilty_party species="cat">Dilly</guilty_party>
    <guilty_party species="cat">Nameless</guilty_party>
    <guilty_party species="cat">Katie</guilty_party>
  </hazard>
</house_pet_hazards>

命令行:

$ saxon-lint '/house_pet_hazards/hazard/guilty_party' file.xml

输出:

DillyNamelessKatie

预期输出:

Dilly
Nameless
Katie

编辑

I've found a semi-working solution by searching google hardly 提出的 Michael Kay ,所以我写了这个包装器:

#!/bin/bash

xpath="$1"
[[ -s $2 ]] && file="$(readlink -f "$2")" || file=/dev/stdin

java -cp saxon9he.jar net.sf.saxon.Query -qs:"for \$x in doc('file://$file')$xpath
return (data(\$x),text{'&#10;'})" !method=text

输出:

$ saxon-lint "/house_pet_hazards/hazard/guilty_party" /tmp/file.xml
Dilly
Nameless
Katie

但是我发现的问题是,当我使用路径的时候

house_pet_hazards/hazard/guilty_party

我得到错误

Error on line 1 column 37 
  XPST0003 XQuery syntax error near #...p/file.xml')house_pet_hazards/#:
    expected "return", found name "house_pet_hazards"
Static error(s) in query

./house_pet_hazards/hazard/guilty_party

我收到错误:

Error on line 1 column 37 
  XPST0003 XQuery syntax error near #... doc('file:///tmp/file.xml')./#:
    expected "return", found "."
Static error(s) in query

The wrapper


最佳答案

当然,只需将您的查询字符串更改为:

-qs:"string-join(/house_pet_hazards/hazard/guilty_party,'&#xA;')"

您也可以缩短到 //guilty_party 的路径。

Cygwin 中的示例 bash 脚本:

[/cygdrive/c/apps/SaxonHE9-6-0-3J]
==> cat saxon-lint.bsh
#!/bin/bash.exe

java -cp saxon9he.jar net.sf.saxon.Query -s:$2 -qs:"string-join($1,'&#xA;')" !method=text

[/cygdrive/c/apps/SaxonHE9-6-0-3J]
==> ./saxon-lint.bsh //guilty_party so.xml
Dilly
Nameless
Katie

关于xml - 来自命令行的 Saxon-HE 9.6 的换行符分隔输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27475096/

有关xml - 来自命令行的 Saxon-HE 9.6 的换行符分隔输出的更多相关文章

  1. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  2. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  3. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  4. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  5. ruby - 代码块中的 Markdown 换行符 - 2

    使用Redcarpet,当我在Markdown中包含类似以下内容时,它不考虑任何换行符或缩进。我在行尾尝试了两个空格。代码之间的额外行。似乎没有任何效果。```xml3```我明白了:3这里是Redcarpet设置:Redcarpet::Markdown.new(Redcarpet::Render::HTML,:autolink=>true,:space_after_headers=>true,:fenced_code_blocks=>true,:no_intra_emphasis=>true,:lax_html_blocks=>true)我需要做什么才能正确换行并保留缩进,就像这里或

  6. ruby - 将命令行上的变量传递给 Cucumber 测试 - 2

    我正在尝试将cucumber项目的用户名和密码置于版本控制之外。有没有办法在命令行上手动将用户名和密码等变量传递给Cucumber脚本?我的备份计划是将它们放在一个YML文件中,然后将该文件添加到gitignore,这样它们就不会被置于版本控制中。 最佳答案 所以,我看到了您对铁皮人的评论,答案是肯定的。cucumberPASSWORD=my_passwordPASSWORD被设置为环境变量,您可以通过将其引用为ENV['PASSWORD']来使用它的值。例如,browser.text_field(:id=>'pwd').setEN

  7. ruby - ruby 中的同一个程序如何接受来自用户的输入以及命令行参数 - 2

    我的ruby​​脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes

  8. ruby-on-rails - Rails 3,在RAILS_ROOT上方显示来自本地文件系统的jpg图片 - 2

    我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。

  9. ruby - 如何使用 rspec stub /模拟对命令行的调用? - 2

    我正在尝试测试命令行工具的输出。如何使用rspec来“伪造”命令行调用?执行以下操作不起作用:it"shouldcallthecommandlineandreturn'text'"do@p=Pig.new@p.should_receive(:run).with('my_command_line_tool_call').and_return('resulttext')end如何创建stub? 最佳答案 使用newmessageexpectationsyntax:规范/虚拟规范.rbrequire"dummy"describeDummy

  10. ruby-on-rails - 如何在 Rails 3 中禁用 XML 解析 - 2

    我想禁用HTTP参数的自动XML解析。但我发现命令仅适用于Rails2.x,它们都不适用于3.0:config.action_controller.param_parsers.deleteMime::XML(application.rb)ActionController::Base.param_parsers.deleteMime::XMLRails3.0中的等价物是什么? 最佳答案 根据CVE-2013-0156的最新安全公告你可以将它用于Rails3.0。3.1和3.2ActionDispatch::ParamsParser::

随机推荐