我正在尝试理解和学习如何从XML中获取价值。我从下面的链接中获取了XML文档的参考。
为了澄清,我删除了一些不需要的xml部分。
示例
<?Label VCAT|RESERVATION|21405|SUCCESS?>
<Reservation xmlns="reservation.fidelio.4.0" mfShareAction="NA" mfReservationAction="EDIT">
<HotelReference>
<GuestCounts>
<GuestCount>
<ageQualifyingCode>ADULT</ageQualifyingCode>
<mfCount>1</mfCount>
</GuestCount>
<GuestCount>
<ageQualifyingCode>CHILD</ageQualifyingCode>
<mfCount>0</mfCount>
</GuestCount>
</GuestCounts>
</HotelReference>
</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">
<HotelReference>
<GuestCounts>
<GuestCount>
<ageQualifyingCode>ADULT</ageQualifyingCode>
<mfCount>1</mfCount>
</GuestCount>
<GuestCount>
<ageQualifyingCode>CHILD</ageQualifyingCode>
<mfCount>0</mfCount>
</GuestCount>
</GuestCounts>
</HotelReference>
</Reservation>'
EXEC sp_xml_preparedocument @XmlDocumentHandle OUTPUT, @XMLData
SELECT *
FROM OPENXML (@XmlDocumentHandle, '/Reservation/HotelReference/GuestCounts/GuestCount/',2)
WITH (ageQualifyingCode varchar(10) '//ageQualifyingCode',
mfCount int '//mfCount')
EXEC sp_xml_removedocument @XmlDocumentHandle
尝试使用XQuery方法-定义XML名称空间,然后查询XML:
DECLARE @XMLData XML
SET @XMLData ='<?Label VCAT|RESERVATION|21405|SUCCESS?>
<Reservation xmlns="reservation.fidelio.4.0" mfShareAction="NA" mfReservationAction="EDIT">
<HotelReference>
<GuestCounts>
<GuestCount>
<ageQualifyingCode>ADULT</ageQualifyingCode>
<mfCount>1</mfCount>
</GuestCount>
<GuestCount>
<ageQualifyingCode>CHILD</ageQualifyingCode>
<mfCount>0</mfCount>
</GuestCount>
</GuestCounts>
</HotelReference>
</Reservation>';
WITH XMLNAMESPACES(DEFAULT 'reservation.fidelio.4.0')
SELECT
xc.value('(ageQualifyingCode)[1]', 'varchar(20)'),
xc.value('(mfCount)[1]', 'int')
FROM
@XMLData.nodes('/Reservation/HotelReference/GuestCounts/GuestCount') AS XT(XC)
这将返回两行,分别为<ageQualifyingCode>
和<mfCount>
的值: