一次调用 XmlStarlet 的条件
Conditions inside one call to XmlStarlet
假设我有这样一个 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
xmlstarlet sel -t -m "//field" -v "@controlType" -o " \"" -v "@id" -o "\" (enabled: " -v "@enabled" -o ")" -n
是否可以将 1 次调用中的 3 种不同类型的结果转换为
XmlStarlet,以便字段按其原始顺序显示?
您需要使用 --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 ""
假设我有这样一个 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
xmlstarlet sel -t -m "//field" -v "@controlType" -o " \"" -v "@id" -o "\" (enabled: " -v "@enabled" -o ")" -n
是否可以将 1 次调用中的 3 种不同类型的结果转换为 XmlStarlet,以便字段按其原始顺序显示?
您需要使用 --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 ""