2
我有一个存储在SQL表中的XML文件。现在我想用SQL读取z特定的元素值。从XML命名空间中选择XML中的特定元素
如果XML中没有名称空间元素,我可以从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
+1从我身边。 (*:Envelope/*:Cube/*:Cube/*:Cube [@ *:Cube/*:Cube/*:货币=“美元”]/@ *:率)[1]','nvarchar(max)')'),但更明确更好。因此,我会在开始时避开'//'...... – Shnugo
@Shnugo Hi Shnugo!确实,*需要选择*可能有点太严格。当您不知道是否有多个定义相同元素名称的名称空间时,我回应了一般性建议。但在这种情况下,只有一个名称空间可以选择通配符命名空间限定符。 –