1

この XML フラグメントを考えると (余分な綿毛を削除しました):

<Event name="DataComplete">
   <Task id="d20a0053-7678-43ba-bc8a-ece24dcff15b"/>
     <DataItems>
       <DataItem name="Survey" type="task">
         <Value status="NotStarted" taskId="00000000-0000-0000-0000-000000000000" />
       </DataItem>
       <GroupDataItem name="CT_Visit"> --- this may repeat
         <ItemGroup id="1" >
           <DataItem name="Special Contractor" type="string">Yes</DataItem>

name="Special Contractor" の DataItem の値が "Yes" かどうかを判断する xPath 式はどれですか。

私はこのようなことを試みています:

  Yes = /Event/Task/DataItems/GroupDataItem/ItemGroup/DataItem/@[normalize-space() = 'Special Contractor']

通常、多くのバリエーションが「無効な xPath 式」になります。

手がかりは大歓迎です。ありがとう!

[編集]

答えてくれてありがとう、ジリとウィル。ウィルは近かったですが、私の質問が述べているように、*要素に値があるかどうかを判断しようとしていますYes。true または false のブール値が必要であることをもっと明確にすべきでした。Willの答えを適応させると、次のようになりました。

"Yes" = //Event/Task/DataItems/GroupDataItem/ItemGroup/DataItem[@name='Special Contractor'] 

Boolean='true'これは単純なorを返しますBoolean='false'

みんなありがとう!

4

2 に答える 2

2
/Event/DataItems/GroupDataItem/ItemGroup/DataItem[@name = "Special Contractor"][. = "Yes"]

問題の を返しますDataItemDataItem複数の要素がある場合、これは一致する要素のシーケンスになることに注意してください。ブール値だけが必要な場合:

exists(/Event/DataItems/GroupDataItem/ItemGroup/DataItem[@name = "Special Contractor"][. = "Yes"])

(余談ですが、インデントによりそのように見えますが、投稿したXMLフラグメントTaskの祖先ではないため、xpathから削除しました。)DataItem

于 2013-07-10T13:28:20.080 に答える