在 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')
我正在尝试对 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')