如何解决xmlstarlet返回1,值为空
我正在尝试使用xmlstarlet
来解析此file.xml:
<resultset>
<row>
<field name="b">2</field>
<field name="c"></field>
</row>
</resultset>
有了第一场驱赶就可以了
$ xmlstarlet sel -t -v "resultset/row[1]/field[1]" file.xml
2
$ echo $?
0
但是在第二个字段xmlstarlet
中返回1
$ xmlstarlet sel -t -v "resultset/row[1]/field[1]" file.xml
$ echo $?
1
在我看来,空白字段是正常的。我想解析它而没有xmlstarlet错误。
更新:
与field[@name="b"]
的行为相同:
$ xmlstarlet sel -t -v 'resultset/row/field[@name="b"]' file.xml
2
$ echo $?
0
和
$ xmlstarlet sel -t -v 'resultset/row/field[@name="c"]' file.xml
$ echo $?
1
我想将第二种情况与实际错误区分开来
更新2:主要问题是:
如果我尝试选择[@name="c"]
和[@name="not_exits"]
xmlstarlet
,则返回相同的退出代码1。
但是file.xml的字段名称为“ c”,而没有字段名称为“ not_exist”。
我希望xmlstarlet
打印空字符串并在file.xml包含具有给定名称的空字段时返回退出代码0,
当file.xml根本不包含具有给定名称的字段时,并返回非null退出代码。
解决方法
尝试将xpath表达式更改为
resultset/row/field[@name="b"]
和
resultset/row/field[@name="c"]
看看是否可行。
编辑:
我不确定您要在问题中echo
到底是什么,但是如果我们假设您的xml位于名为file.xml
的文件中,则这些表达式可以正常使用:
xmlstarlet sel -T -t -m "resultset/row/field[@name='b']" -v . --nl file.xml
和
xmlstarlet sel -T -t -m "resultset/row/field[@name='c']" -v . --nl file.xml
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。