我有一个存储在SQL表中的XML文件。现在我想用SQL读取z特定的元素值。
如果XML中没有namespace元素,我可以从XML中读取特定的元素值。我想用命名空间读取XML文件。
这是我的XML文件:
<currency:Envelope xmlns="http://www.currency.com/eurofxref" xmlns:currency="http://www.currency.org/xml/2002-08-01">
<Cube>
<Cube time="2016-11-04">
<Cube currency="USD" rate="1.1093" />
<Cube currency="JPY" rate="114.24" />
<Cube currency="BGN" rate="1.9558" />
<Cube currency="CZK" rate="27.021" />
</Cube>
</Cube>
</currency:Envelope>
以下是用于读取值的SQL代码:
CREATE TABLE XMLwithOpenXML
(
Id INT IDENTITY PRIMARY KEY,
XMLData XML,
LoadedDateTime DATETIME
)
INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime)
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE()
FROM OPENROWSET(BULK 'E:\currency.xml', SINGLE_BLOB) AS x;
SELECT XMLData.value('(Cube/Cube/Cube[@currency="USD"]/@rate)[1]','VARCHAR(MAX)')
FROM XMLwithOpenXML
答案 0 :(得分:2)
您需要在适当的XML命名空间中进行选择。您可以使用WITH XMLNAMESPACES声明命名空间并将其与前缀相关联。然后在引用命名空间中的元素时使用此前缀。
WITH
XMLNAMESPACES('http://www.currency.com/eurofxref' AS efr)
SELECT
rate=XMLData.value('(//efr:Cube/efr:Cube/efr:Cube[@currency="USD"]/@rate)[1]','VARCHAR(MAX)')
FROM
XMLwithOpenXML;