在 SQL 服务器存储过程中使用 XPath 表达式

Using XPath expressions inside SQL Server stored procedure

我正在尝试对 SQL 服务器存储过程中 XML 文档中的 select 节点或节点集使用 XPath 表达式。

我正在尝试做一些类似于 c#

中的代码的事情
 XmlDocument xmlDoc = new XmlDocument();
 xmlDoc.Load(response.GetResponseStream());

 XmlNode contact = xmlDoc.SelectSingleNode("//users/user/contact");
 string strContact = contact.InnerText.Trim();

XML 是从存储过程中调用 Web 服务的结果。

类似于这个例子。 Calling Web Service from stored procedure

但是 XML 看起来像这样:

<DocumentElement xmlns="">
  <stats>
    <delivered>5</delivered>
  </stats>
</DocumentElement>

我需要使用类似于

的语句检索传递的节点的值
XmlNode delivered = xmlDoc.SelectSingleNode("//stats/delivered");

您显然忽略了在您的根元素上定义的 XML 命名空间 - 您需要尊重 XML 命名空间并将其包含在您的查询中!

-- Sample data - using a *SAMPLE* namespace - replace with your own!
DECLARE @input XML = '<DocumentElement xmlns="urn:sample-namespace">
  <stats>
    <delivered>5</delivered>
  </stats>
</DocumentElement>'

-- set up a query that *uses* that XML namespace instead of ignoring it...
;WITH XMLNAMESPACES( DEFAULT 'urn:sample-namespace')
SELECT
    @input.value('(/DocumentElement/stats/delivered)[1]', 'int')