【发布时间】:2020-02-27 12:28:05
【问题描述】:
我在 SQL 表列中有一个 XML。我需要解码这个 xml 并获取特定节点的值。在下面找到我的 XML
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns:createTransactionResponse
xmlns:impl="http://office/work/services/service1"
xmlns:ns="http://www.regfrez.com/schemas/service1_V2/SharedResources/XMLSchema/Schema.xsd"
xmlns:tns="http://www.erdeftq.ae/Activematrix/ESB/service1/1_0">
<transactionResponse>
<transaction-info>
<registrationId>R1234</registrationId>
<trialId>T12345</trialId>
<transactionId>12345</transactionId>
<transactionDate>27-02-2020:08:47</transactionDate>
<status>Confirmed</status>
</transaction-info>
</transactionResponse>
</ns:createTransactionResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我需要节点的值:registrationId、transactionId 和 status,我尝试了这个但没有成功,因为结果是空值:
DECLARE @xml XML
SET @xml = 'XML here'
SELECT T.C.value('@status', 'nvarchar(100)') FROM @xml.nodes('createTransactionResponse/transactionResponse/transaction-info/status') T(C)
SELECT T.C.value('@trans', 'nvarchar(100)') FROM @xml.nodes('createTransactionResponse/transactionResponse/transaction-info/transactionId') T(C)
SELECT T.C.value('@id', 'nvarchar(100)') FROM @xml.nodes('createTransactionResponse/transactionResponse/transaction-info/registrationId') T(C)
任何帮助/更正将不胜感激
【问题讨论】:
-
理想情况下,您应该编辑之前的问题并等待它重新打开,但是,您现在已经展示了您的尝试,这很棒。
-
@Larnu 如果您有一些信息,请提出解决方案。
-
我已经给你写了一个答案。 :)
-
除了使用 XML 类型还有其他方法吗?我需要 w.r.to NVARCHAR 数据类型,因为此 xml 存储在 NVARCHAR(MAX) 类型的列中
-
如果您不将 XML 数据存储为
xml您不能将其视为 XML,就这么简单。修复数据类型。
标签: sql sql-server xml