我有以下XML文档:
<root>
<description name="testing1">
<descriptionextension name="unda">
<type>test</type>
</descriptionextension>
<descriptionextension name="koppu">
<type>test</type>
</descriptionextension>
<descriptionextension name="valid">
<type>test</type>
</descriptionextension>
</description>
<description name="testing2">
<descriptionextension name="valid">
<type>test</type>
</descriptionextension>
<descriptionextension name="valid">
<type>test</type>
</descriptionextension>
<descriptionextension name="valid">
<type>test</type>
</descriptionextension>
</description>
</root>
这是XPath查询:
//description/descriptionextension[contains(@name,'valid')]/../@name
仅当所有子说明扩展名都有效时,是否可以获取说明名称&#39;。在这里,我只想获取&#34; testing2&#34;。
答案 0 :(得分:4)
一个解决方案:
//description[empty(descriptionextension[@name != 'valid'])]/@name/string()
这是另一个(还有其他各种):
//description[not(descriptionextension/@name != 'valid')]/@name/string()
使用XQuery,您可以写:
for $d in //description
where every $de in $d/descriptionextension satisfies $de/@name = 'valid'
return $d/@name/string()
正如您可能已经看到的那样,如果description
没有descriptionextension
子元素,也会被接受。
答案 1 :(得分:1)
您可以尝试查找所有元素,不任何出现其他而不是“有效”:
/root/description[count(descriptionextension[@name!="valid"])=0]/@name
如果根本没有扩展,可能需要检查会发生什么......
答案 2 :(得分:1)
试试这个:
string(//description[count(descriptionextension[@name="valid"]) = count(descriptionextension)]/@name)
testing2
答案 3 :(得分:-2)
这应该可以解决问题
//description[descriptionextention/@name='valid']/@name