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

一次调用XmlStarlet内的条件

孔厉刚
2023-03-14

假设我有这样一个XML文件:

<view>
  <field table="alice" name="fish"/>
  <field id="confirmation" controlType="button" enabled="some-condition">
    <title>Confirm...</title>
  </field>
  <field table="bob" name="cat"/>
  <field table="bob" name="dog" hidden="true"/>
</view>

我想输出它的所有字段,但输出是以存在的属性为条件的。

预期结果:

field 'alice.fish'
button "Confirm..." (enabled: some-condition)
field 'bob.cat'
field 'bob.dog' (hidden: true)

当前结果:

field 'alice.fish' (hidden: )
field '.' (hidden: )
field 'bob.cat' (hidden: )
field 'bob.dog' (hidden: true)
 "" (enabled: )
button "confirm" (enabled: some-condition)
 "" (enabled: )
 "" (enabled: )

通过2次调用XmlStarlet:

xmlstarlet sel -t -m "//field" -o "field '" -v "@table" -o "." -v "@name" -o "' (hidden: " -v "@hidden" -o ")" -n $1
xmlstarlet sel -t -m "//field" -v "@controlType" -o " \"" -v "@id" -o "\" (enabled: " -v "@enabled" -o ")" -n $1

有没有可能在对XmlStarlet的一次调用中得到3种不同类型的结果,这样字段就可以保持原来的顺序?

共有1个答案

松越
2023-03-14

您需要使用 --if 选项(--break 表示当前控制结构的结束)。

xmlstarlet sel --text -t -m "//field" \
    --if "@controlType='button'" \
        -v "@controlType" -o " \"" -v "title" -o "\" (enabled: " -v "@enabled" -o ")" \
    --else \
        -o "field '" -v "@table" -o "." -v "@name" -o "'" \
        --if "@hidden" -o " (hidden: " -v "@hidden" -o ")" --break \
    --break \
    -n "$1"
 类似资料:
  • XMLStarlet 包含一组命令行的 XML 工具,主要用于对 XML 文档进行转换、查询、校验以及编辑。

  • 问题内容: 为什么在组合框中选择项目时会两次调用此事件? 问题答案: 对于一次更改,JComoboBox ItemListener确实会被调用两次。一次用于SELECTED事件,一次用于DESELECTED事件。 有关如何编写ItemListener的信息,请参见本教程页面。 基本上你要做的就是

  • 问题内容: 我有一个函数,每2.5秒调用一次以检查在后台运行的任务。如果响应为错误,则它将axios调用到url,如果响应成功,则停止该函数。 这在Chrome和Mozilla上完美运行,但由于某些原因在IE(版本11)中不起作用。该函数可以无限地调用自身,但是检查日志表明它仅调用axios一次,即使后端任务已经完成,它也将永远循环。 为什么没有在IE上再次调用axios?有什么我想念的吗? 问题

  • 我有多个具有多个选择限制的无线电组,一个是by name属性,另一个是jQuery。对于每个无线电组,我在更改时将checked属性设置为false,这样每个组只能检查一个无线电。 HTML jQuery 这只适用于第一组,有什么建议吗? 编辑: 使用类选择器而不是ID: HTML jQuery

  • 本文向大家介绍ajax的定时调用每5秒调用一次,包括了ajax的定时调用每5秒调用一次的使用技巧和注意事项,需要的朋友参考一下

  • 编辑:由于代码剪贴不会重现错误-这里有一个指向github repo的链接:(代码远未完成) https://github.com/altruios/clicker-game 我现在已经在两台计算机上运行了它——这两台计算机都有相同的行为,而代码剪报并没有显示出来。 因此,我正在构建一个clicker游戏来学习react,我不明白为什么这段代码会以这种方式运行: 在主应用程序中,我有以下功能: 那