【问题标题】:Conditions inside one call to XmlStarlet一次调用 XmlStarlet 中的条件
【发布时间】:2016-02-26 22:58:13
【问题描述】:

假设我有这样一个 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: )

通过对 XmlStarlet 的 2 次调用:

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

是否可以将 1 次调用中的 3 种不同类型的结果转换为 XmlStarlet,以便字段保持其原始顺序显示?

【问题讨论】:

    标签: xml shell xmlstarlet


    【解决方案1】:

    您需要使用--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"
    

    【讨论】:

    • 快到了!对于按钮,我想要的是title 标签之间的文本。你能告诉我如何得到它吗? -- 这里不是真正的 XPath 新手。
    • 我的意思是:这里是一个真正的 XPath 新手!
    • 只需将@id 替换为title
    • 最后一个问题:是否可以通过编程方式将找到的“controlType”(此处:“button”->“Button”)大写(仅首字母)?
    • 嗯,也许你可以试试-v "translate(substring(@controlType,1,1),'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" -v "substring(@controlType,2)" 而不是-v "@controlType",但在输出上使用sed 可能会更好。
    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多