我如何通过分组条件从XML获取值?

时间:2015-01-08 12:37:44

标签: xml xpath

我想在某些条件下从XML获取属性值。我不知道这组值是如何检查XPATH条件的。

以下是我的XML格式:

<TTIDCData>
   <CYAccountHide HideTable="False">
      <fldAccountType Value="55" HideField="False" PrintValue="55" Description=""/>
      <fldActNumber Value="502100" HideField="False" PrintValue="502100"/>
   </CYAccountHide>
   <CYAccountHide HideTable="False">
      <fldAccountType Value="55" HideField="False" PrintValue="55" Description=""/>
      <fldActNumber Value="502200" HideField="False" PrintValue="502200"/>
   </CYAccountHide>
   <CYAccountHide HideTable="False">
      <fldAccountType Value="55" HideField="False" PrintValue="55" Description=""/>
      <fldActNumber Value="502200" HideField="False" PrintValue="502200"/>
   </CYAccountHide>
   <CYAccountHide HideTable="False">
      <fldAccountType Value="55" HideField="False" PrintValue="55" Description=""/>
      <fldActNumber Value="502222" HideField="False" PrintValue="502200"/>
   </CYAccountHide>
   <person name="blair" address="502100"/>
   <person name="blair" address="502200"/>
   <person name="blair" address="502205"/>
   <person name="blair" address="502200"/>
</TTIDCData> 

我想估计哪个不匹配。条件为//CYAccountHide/fldActNumber/@Value != //person/@address

但这种情况不起作用。

基本上在我的XML中,我有//CYAccountHide/fldActNumber/@Value的值,此属性为502100,502200,502201,而//person/@address属性的值为502100,502200。我希望在xpath的帮助下只有502201

如果只验证一个值,那么// CYAccountHide / fldActNumber / @ Value!=&#39; 502100&#39;这个条件是有效的,但我希望用该XML标签验证值组。

1 个答案:

答案 0 :(得分:2)

我想我已经理解了你现在需要的东西。使用以下XPath表达式

//CYAccountHide/fldActNumber/@Value[not(. = //person/@address)]

转换为

//CYAccountHide/fldActNumber/@Value       Select all attributes named "Value" of
                                          elements "fldActNumber" that themselves are
                                          children of "CYAccountHide" elements.
[not(. = //person/@address)]              but only return them if there is no "person"
                                          element anywhere in the document that has an
                                          "address" attribute with the same value as
                                          the "Value" attribute.

,结果将是

Value="502201"