执行带命名空间的 XPath 查询(SQLXML 托管类)
XPath 查询可以包含命名空间。 如果架构元素为限定命名空间(使用目标命名空间),则针对该架构的 XPath 查询必须指定该命名空间。
由于Microsoft SQLXML 4.0 不支持通配符 \ ,因此必须使用命名空间前缀指定 XPath 查询。 若要解析前缀,请使用命名空间属性指定命名空间绑定。
在下面的示例中,XPath 查询使用通配符 \ 和 local-name() 和 namespace-uri() XPath 函数指定命名空间。 此 XPath 查询返回本地名称为 Employee 且命名空间 URI 为 urn:myschema:Contacts 的所有元素:
/*[local-name() = 'Contact' and namespace-uri() = 'urn:myschema:Contacts']
在 SQLXML 4.0 中,用命名空间前缀来指定此 XPath 查询。 例如 x:Contact,其中 x 是命名空间前缀。 请看以下 XSD 架构:
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
xmlns:con="urn:myschema:Contacts"
targetNamespace="urn:myschema:Contacts">
<complexType name="ContactType">
<attribute name="CID" sql:field="ContactID" type="ID"/>
<attribute name="FName" sql:field="FirstName" type="string"/>
<attribute name="LName" sql:field="LastName"/>
</complexType>
<element name="Contact" type="con:ContactType" sql:relation="Person.Contact"/>
</schema>
由于此架构定义了目标命名空间,因此针对此架构的 XPath 查询(如“Employee”)必须包含命名空间。
以下 C# 应用程序示例针对前述 XSD 架构 (MySchema.xml) 执行 XPath 查询。 若要解析前缀,请使用 SqlXmlCommand 对象的 Namespaces 属性指定命名空间绑定。
注意
在代码中,必须在连接字符串中提供 SQL Server 实例的名称。
using System;
using Microsoft.Data.SqlXml;
using System.IO;
class Test
{
static string ConnString = "Provider=SQLOLEDB;Server=(local);database=AdventureWorks;Integrated Security=SSPI";
public static int testXPath()
{
//Stream strm;
SqlXmlCommand cmd = new SqlXmlCommand(ConnString);
cmd.CommandText = "x:Contact[@CID='1']";
cmd.CommandType = SqlXmlCommandType.XPath;
cmd.RootTag = "ROOT";
cmd.Namespaces = "xmlns:x='urn:myschema:Contacts'";
cmd.SchemaPath = "MySchema.xml";
using (Stream strm = cmd.ExecuteStream()){
using (StreamReader sr = new StreamReader(strm)){
Console.WriteLine(sr.ReadToEnd());
}
}
return 0;
}
public static int Main(String[] args)
{
testXPath();
return 0;
}
}
若要测试此示例,必须在计算机上安装 Microsoft .NET Framework。
测试应用程序
将在该示例中提供的 XSD 架构 (MySchema.xml) 保存到某个文件夹中。
将此示例中提供的 C# 代码(DocSample.cs)保存在存储架构的同一文件夹中。 (如果将文件存储在其他文件夹中,则必须编辑代码并为映射架构指定相应的目录路径。)
编译代码。 若要在命令提示符下编译此代码,请使用:
csc /reference:Microsoft.Data.SqlXML.dll DocSample.cs
这将创建一个可执行文件 (DocSample.exe)。
在命令提示符下,执行 DocSample.exe。