我有一段这样的 XML:
<root>
<foo src=""/>
<foo src="bar"/>
<foo />
</root>
我想知道哪个元素有一个 src 属性 ,它们是空的并且有值。
我来的最远是与
$ xmlstarlet sel -t -m '//foo' -v @src -n foo.xml
bar
虽然这并没有告诉我第三个 foo 缺少该属性。
最佳答案
这将选择没有 src
的 foos属性。
/root/foo[not(@src)]
对于其他两项任务,我将混合使用@TOUDIdel 和@Dimitre Novatchev 指出的表达式:
/root/foo[@src and string-length(@src)=0]
对于空的 foos src
, 和 /root/foo[@src and string-length(@src)!=0]
对于带有 src
的 foos里面有内容。顺便说一句,我会避免使用“任何地方”选择器,
//
(更不用说 *
通配符),除非您确定这正是您所需要的。 //
就像让你非常渴望的狗嗅一块布并告诉它,“把所有闻起来像这样的东西都给我,无论你在哪里找到它”。你不会相信它可以决定带回来的奇怪的废话。
关于xpath - 测试 XML 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5580372/