Я пытаюсь понять и научиться принимать значение от XML. Я взял ссылку на документ XML по ссылке ниже.
Ссылка
Чтобы получить разъяснения, я удалил некоторые нежелательные xml детали.
Пример
<?Label VCAT|RESERVATION|21405|SUCCESS?>
<Reservation xmlns="reservation.fidelio.4.0" mfShareAction="NA" mfReservationAction="EDIT">
<reservationID>11650</reservationID>
<GuestCounts>
<GuestCount>
<ageQualifyingCode>ADULT</ageQualifyingCode>
<mfCount>1</mfCount>
</GuestCount>
<GuestCount>
<ageQualifyingCode>CHILD</ageQualifyingCode>
<mfCount>0</mfCount>
</GuestCount>
</GuestCounts>
</Reservation>
В HTML, например google.com - для таргетинга ввода на этой странице мы используем XPath как //input[@name='q']
. Точно так же, чтобы указать узел, мы можем указать //ageQualifyingCode
, чтобы получить значение в этом узле. На основании этого я создал запрос, указанный ниже. Может кто-нибудь сказать мне, что не так с этим запросом, поскольку я получаю вывод как NULL.
DECLARE @XmlDocumentHandle int
DECLARE @XMLData XML
SET @XMLData ='<?Label VCAT|RESERVATION|21405|SUCCESS?>
<Reservation xmlns="reservation.fidelio.4.0" mfShareAction="NA" mfReservationAction="EDIT">
<reservationID>11650</reservationID>
<GuestCounts>
<GuestCount>
<ageQualifyingCode>ADULT</ageQualifyingCode>
<mfCount>1</mfCount>
</GuestCount>
<GuestCount>
<ageQualifyingCode>CHILD</ageQualifyingCode>
<mfCount>0</mfCount>
</GuestCount>
</GuestCounts>
</Reservation>'
EXEC sp_xml_preparedocument @XmlDocumentHandle OUTPUT, @XMLData
SELECT *
FROM OPENXML (@XmlDocumentHandle, '/Reservation/GuestCounts/GuestCount/',2)
WITH (ageQualifyingCode varchar(10) '//ageQualifyingCode',
mfCount int '//mfCount')
EXEC sp_xml_removedocument @XmlDocumentHandle
Я также пытался использовать XQuery, упомянутый ниже, но без результата
SELECT * FROM (
SELECT TOP 1
X.Y.value('(ageQualifyingCode)[1]', 'nvarchar(50)') AS ageQualifyingCode, X.Y.value('(mfCount)[1]', 'int') AS mfCount
FROM #temp1 t
CROSS APPLY t.xmlBody.nodes('Reservation/GuestCounts/GuestCount') AS X(Y)
) T
Кроме того, как будет У меня получится настроить таргетинг на IDID в том же кроссе?
Вывод
+---------------+-------------------+---------+
| reservationID | ageQualifyingCode | mfCount |
+---------------+-------------------+---------+
| 11650 | ADULT | 1 |
+---------------+-------------------+---------+
| 11650 | CHILD | 0 |
+---------------+-------------------+---------+