我需要一个XPath表达式来验证XML列表元素是否只有某种类型的节点。 例如:
我需要知道列表中是否只有图像。
<?xml version="1.0" encoding="UTF-8"?>
<mc type="group">
<mc type="list">
<mc type="group">
<mc type="image"/>
</mc>
<mc type="group">
<mc type="image"/>
</mc>
<mc type="group">
<mc type="image"/>
</mc>
<mc type="group">
<mc type="image"/>
</mc>
</mc>
</mc>
以上XML为TRUE
<?xml version="1.0" encoding="UTF-8"?>
<mc type="group">
<mc type="list">
<mc type="group">
<mc type="image"/>
</mc>
<mc type="group">
<mc type="image"/>
<mc type="text"/>
</mc>
<mc type="group">
<mc type="image"/>
</mc>
<mc type="group">
<mc type="image"/>
</mc>
</mc>
</mc>
以上XML为FALSE
答案 0 :(得分:2)
使用强>:
not(//mc[not(mc) and @type[not(. = 'image')]])
当且仅当没有“leaf”true()
元素时,其mc
属性与字符串{{1}不同的字符串值才会计算为type
}。
说明:正确使用“ double-negation law ”。
答案 1 :(得分:1)
如果您从文档节点开始作为上下文节点,则可以检查not(/mc/mc[@type = 'list']//mc[not(@type = 'image')])
;如果您从具有not(.//mc[not(@type = 'image')])
属性的mc
元素开始,则可以type="list"
。
答案 2 :(得分:0)
你可以使用一个或多个的否定:not(one-or-more(mc[not(@type = 'image')]))
或其他一些。
答案 3 :(得分:0)
或者是愚蠢/简单方法,检查所有mc元素(如果它们不是图像/组/列表):
not(//mc[not(@type = ("image", "group", "list"))])