xpath - 测试 XML 属性

标签 xpath xmlstarlet

我有一段这样的 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/

相关文章:

c# - 使用 selenium C# 在一行中单击操作链接(删除、查看、编辑)

java - Selenium IDE - 在表格中特定文本的同一行中查找链接

java - xpath:无法单击任何复选框

bash - 通过 XMLStarlet 取消转义符号 (&) - 窃听 &

xml - 返回 XML 元素的内容

XMLStarlet 不删除元素

xpath - 如何使用 XPath 从所选文本中过滤某些单词?

bash - 是否可以使用 xmlstarlet 或其他 bash 工具在 xml 文件内注释/取消注释标签

Bash - 在文件中搜索特定字符串并替换为直接源

java - 使用多个 xpath 表达式从 xml 文件中选择所有元素