我有以下格式的xml格式:
<start>
<contents>
<content name="content1" id="1582670184">
<properties name="GIFT_ID" type="data" value="109"/>
<properties name="KEY_ID" type="data" value="1006"/>
</content>
<content name="content2" id="1582670194">
<properties name="GIFT_ID" type="data" value="110"/>
<properties name="KEY_ID" type="data" value="1007"/>
</content>
<content name="content3" id="12346">
<properties name="GIFT_ID" type="data" value="111"/>
</content>
<content name="content4" id="12345">
<properties name="GIFT_ID" type="data" value="112"/>
</content>
</contents>
</start>
我想要满足以下条件的上述xml中的两个值
案例1:如何在<content>
标记中获取名称,其中只有&#34; GIFT_ID&#34;是<properties>
标记,即内容名称只有&#34; GIFT_ID&#34;存在于属性中。
预期输出为:content3,content 4
案例2:如何获得GIFT_ID的@value,其中包含&#34; KEY_ID&#34;标签不存在。
预期产量为:111,112
请帮我解决这个问题。
答案 0 :(得分:1)
将您的描述翻译成XPath ......
案例1:
//content[properties/@name = 'GIFT_ID' and not(properties/@name != 'GIFT_ID')]/@name
案例2:
//content[not(properties/@name = 'KEY_ID')]/properties[@name = 'GIFT_ID']/@value
答案 1 :(得分:0)
类似的东西:
案例1:
//content[ count(*)=1][//content/properties [@name='GIFT_ID']]/@name
案例2:
//content[ count(*)=1]/properties [@name='GIFT_ID']/@value
修改强>
上面的两个陈述使得(可能是错误的)假设每个内容标记最多包含一个名为'GIFT_ID'或'KEY_ID'的属性 - 因此使用count(*)= 1.
然而,关于为什么count(*)= 1的要求的Mathias'问题反映了我已经改进了两个select语句以满足要求 对于可能存在以下情况:
案例1
//content[count(properties[not(@name='GIFT_ID')])=0 and properties [@name='GIFT_ID']]/@name
案例2
//content[count(properties[@name='KEY_ID'])=0 and properties [@name='GIFT_ID']]/properties/@value
这只是har07解决方案的替代方案 - 他更简洁,绝对是更好的解决方案。