XPath 参数值未在表达式中求值
XPath Param Value Is Not Evaluating In Expression
@Value='1' 似乎没有在下面的表达式中计算,因为它 returns SEventData 的两个节点,而不是只有一个 @Value 为“1”的节点。我错过了什么?
来源:
<CData>
<SData SKey="006" >
<SEventData SEventOID="UNS" SEventRepeatKey="2">
<FData FOID="REQUIRED" FRepeatKey="1">
<ItemGroupData ItemGroupOID="REQUIRED" ItemGroupRepeatKey="0"
TransactionType="Upsert">
<ItemData ItemOID="REQ" Value="0" />
</ItemGroupData>
</FData>
</SEventData>
<SEventData SEventOID="UNS" SEventRepeatKey="3">
<FData FOID="REQUIRED" FRepeatKey="1">
<ItemGroupData ItemGroupOID="REQUIRED" ItemGroupRepeatKey="0"
TransactionType="Upsert">
<ItemData ItemOID="REQ" Value="1" />
</ItemGroupData>
</FData>
</SEventData>
</SData>
</CData>
用表达式
//CData[.//SData[@SKey='006']/SEventData/FData/ItemGroupData/ItemData[@ItemOID='REQ' and @Value='1']]//SEventData
returns 两个而不是一个
Element='<SEventData SEventOID="UNS" SEventRepeatKey="2">
<FData FOID="REQUIRED" FRepeatKey="1">
<ItemGroupData ItemGroupOID="REQUIRED"
ItemGroupRepeatKey="0"
TransactionType="Upsert">
<ItemData ItemOID="REQ" Value="0"/>
</ItemGroupData>
</FData>
</SEventData>'
Element='<SEventData SEventOID="UNS" SEventRepeatKey="3">
<FData FOID="REQUIRED" FRepeatKey="1">
<ItemGroupData ItemGroupOID="REQUIRED"
ItemGroupRepeatKey="0"
TransactionType="Upsert">
<ItemData ItemOID="REQ" Value="1"/>
</ItemGroupData>
</FData>
</SEventData>'
您可以使用此 XPath 来找到您要查找的内容:
//SEventData[.//FData/ItemGroupData/ItemData[@ItemOID='REQ' and @Value='1']]
您当前的 XPath 表达式 returns 根节点 //CData
包含以下条件:.//SData[@SKey='006']/SEventData/FData/ItemGroupData/ItemData[@ItemOID='REQ' and @Value='1']
.
所以是的,//CData
里面有上面的条件,当你试图在 //CData
里面找到 //SEventData
时,它 returns 你们两个 //SEventData
节点。
你在这里应该做的是根据你的情况定位//SEventData
节点本身,就像我在开头写的:
//SEventData[.//FData/ItemGroupData/ItemData[@ItemOID='REQ' and @Value='1']]
@Value='1' 似乎没有在下面的表达式中计算,因为它 returns SEventData 的两个节点,而不是只有一个 @Value 为“1”的节点。我错过了什么?
来源:
<CData>
<SData SKey="006" >
<SEventData SEventOID="UNS" SEventRepeatKey="2">
<FData FOID="REQUIRED" FRepeatKey="1">
<ItemGroupData ItemGroupOID="REQUIRED" ItemGroupRepeatKey="0"
TransactionType="Upsert">
<ItemData ItemOID="REQ" Value="0" />
</ItemGroupData>
</FData>
</SEventData>
<SEventData SEventOID="UNS" SEventRepeatKey="3">
<FData FOID="REQUIRED" FRepeatKey="1">
<ItemGroupData ItemGroupOID="REQUIRED" ItemGroupRepeatKey="0"
TransactionType="Upsert">
<ItemData ItemOID="REQ" Value="1" />
</ItemGroupData>
</FData>
</SEventData>
</SData>
</CData>
用表达式
//CData[.//SData[@SKey='006']/SEventData/FData/ItemGroupData/ItemData[@ItemOID='REQ' and @Value='1']]//SEventData
returns 两个而不是一个
Element='<SEventData SEventOID="UNS" SEventRepeatKey="2">
<FData FOID="REQUIRED" FRepeatKey="1">
<ItemGroupData ItemGroupOID="REQUIRED"
ItemGroupRepeatKey="0"
TransactionType="Upsert">
<ItemData ItemOID="REQ" Value="0"/>
</ItemGroupData>
</FData>
</SEventData>'
Element='<SEventData SEventOID="UNS" SEventRepeatKey="3">
<FData FOID="REQUIRED" FRepeatKey="1">
<ItemGroupData ItemGroupOID="REQUIRED"
ItemGroupRepeatKey="0"
TransactionType="Upsert">
<ItemData ItemOID="REQ" Value="1"/>
</ItemGroupData>
</FData>
</SEventData>'
您可以使用此 XPath 来找到您要查找的内容:
//SEventData[.//FData/ItemGroupData/ItemData[@ItemOID='REQ' and @Value='1']]
您当前的 XPath 表达式 returns 根节点 //CData
包含以下条件:.//SData[@SKey='006']/SEventData/FData/ItemGroupData/ItemData[@ItemOID='REQ' and @Value='1']
.
所以是的,//CData
里面有上面的条件,当你试图在 //CData
里面找到 //SEventData
时,它 returns 你们两个 //SEventData
节点。
你在这里应该做的是根据你的情况定位//SEventData
节点本身,就像我在开头写的:
//SEventData[.//FData/ItemGroupData/ItemData[@ItemOID='REQ' and @Value='1']]