微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xmlstarlet返回1,值为空

如何解决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 举报,一经查实,本站将立刻删除。