0

以下のコード ブロックでは、DataElements までクエリを実行できます。以下のxml

DECLARE @xmlString XML;
SELECT @xmlString='<Activity xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <ActivityCode>570</ActivityCode>
  <ActivityId>0011d966-fa28-440c-9196-5dbe3c40b2ac</ActivityId>
  <CreateDateTime>2014-06-19T06:57:46.9854126-04:00</CreateDateTime>
  <DataElements xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <a:KeyValueOfstringDataElementLjh4bohd>
      <a:Key>AgentId</a:Key>
      <a:Value>
        <DataType>String</DataType>
        <Name>AgentId</Name>
        <Value>abc\xyxaa</Value>
      </a:Value>
    </a:KeyValueOfstringDataElementLjh4bohd>
    <a:KeyValueOfstringDataElementLjh4bohd>
      <a:Key>PhoneCallStartTime</a:Key>
      <a:Value>
        <DataType>String</DataType>
        <Name>PhoneCallStartTime</Name>
        <Value>06/19/2014 10:57:47</Value>
      </a:Value>
    </a:KeyValueOfstringDataElementLjh4bohd>
  </DataElements>
</Activity

> 以下 XQery

SELECT @xmlString.query('for $activity in /Activity
let $activityId := $activity/DataElements

return data($activityId)
') AS [activityId]
GO

私に結果を与えています:

AgentIdStringAgentIdabc\xyxaaPhoneCallStartTimeStringPhoneCallStartTime06/19/2014 10:57:47

しかし、AgentId を渡すと abc\xyxaa を取得し、PhoneCallStartTime を渡すと 06/19/2014 10:57:47 を取得する必要があります。助けてください

4

1 に答える 1

1

述語と軸ステップを使用して、結果を選択およびフィルタリングします。使用したコードに似ています:

for $activity in /Activity
return data($activity/DataElements//a:Value[Name="PhoneCallStartTime"]/Value)

ここには名前空間が含まれています。あなたはする必要があります

  • 名前空間を宣言するa="http://schemas.microsoft.com/2003/10/Serialization/Arraysか、
  • 要素の名前空間を無視し、要素*:の代わりにワイルドカード名前空間演算子を使用します。a:Value
于 2014-09-08T08:30:45.300 に答える