sql-server - Mssql 如何使用“OPENXML”获取所需的 XML 标记?
问题描述
我正在使用 Microsoft Sql 2012 Express
使用“Soap Service”中的“sp_OAGetProperty”,我得到一个“nvarchar (max)”值,如下所示。
--uuid:ec76ddb3-a0ef-4e4d-980d-2dcddd967e44+id=343 Content-ID:
<http://tempuri.org/0> Content-Transfer-Encoding: 8bit Content-Type: application/xop+xml;charset=utf-8;type="application/soap+xml"
<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Body
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<LoginResponse
xmlns="http://tempuri.org/">
<LoginResult>true</LoginResult>
<sessionID>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIwZmIxNTVhMi0wOTgwLTQwMGQtODdkOC1kYTQ4MzZiMTk1YzEiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9zaWQiOiI5IiwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6IlVCTDJAVEVTVC5DT00jghjghU</sessionID>
</LoginResponse>
</s:Body>
</s:Envelope>
--uuid:ec76ddb3-a0ef-4e4d-980d-2dcddd967e44+id=343--
我正在尝试使用代码从这个 XML 中获取 LoginResult、sessionID 值。
我也将使用此编码延续。示例 我将启动另一个“soapService”并发送 sessionID。
EXEC sp_xml_preparedocument @Yanit OUTPUT,
@XML
SELECT LoginResult,
sessionID
FROM OPENXML(@XML, 's:Envelope/s:Body/LoginResponse')
WITH
(
LoginResult [varchar](500) 'LoginResult',
sessionID [varchar](500) 'sessionID'
)
EXEC sp_xml_removedocument @Yanit
这是我上次尝试的代码,但它向我返回了错误消息。
消息 225,级别 16,状态 12,行 193 为函数“OpenXML”提供的参数无效。
解决方案
我知道这个问题很老,但如果有人有同样的问题,请考虑以下:
错误消息告诉您参数错误 - 调用 OpenXML 函数时,您需要传递内存中 DOM 表示的引用,该引用在 sp_xml_preparedocument 过程中作为 OUTPUT 参数给出(在您的情况下为变量@Yanit);
文档:https ://docs.microsoft.com/en-us/sql/t-sql/functions/openxml-transact-sql?view=sql-server-ver15
使用值为 2 的参数flag来告诉函数在 's:Envelope/s:Body/LoginResponse' 中获取元素(LoginResult、sessionID):
FROM OPENXML(@XML, 's:Envelope/s:Body/LoginResponse', 2 )
推荐阅读
- logging - Apache NiFi:如何为特定处理器添加日志记录
- validation - 数据健康检查工具
- .net-core - .Net Core 3 自包含的单个可执行文件可以反编译吗?
- javascript - 将 React 提供程序函数添加到全局窗口对象
- html - 使用 BeautifulSoup 抓取网页时无法在 a 标签内显示文本
- javascript - 如何将搜索引擎条目保存到 csv 文件
- pandas - 带有 IntEnum 的 pandas value_counts() 引发 RecursionError
- python - Confusion Matrix-Sklearn 0.22 数字格式错误
- swift - 在 Firebase Crashlytics 中未收到崩溃报告
- c# - 将值分配给 3D 列表无法正常工作