Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las consultas XPath pueden incluir espacios de nombres. Si los elementos de esquema están calificados para el espacio de nombres (use un espacio de nombres de destino), las consultas XPath en el esquema deben especificar el espacio de nombres.
Dado que el carácter comodín (*) no se admite en Microsoft SQLXML 4.0, debe especificar la consulta XPath mediante un prefijo de espacio de nombres. Para resolver el prefijo, use la propiedad namespaces para especificar el enlace del espacio de nombres.
En el ejemplo siguiente, la consulta XPath especifica espacios de nombres mediante el carácter comodín (*) y las funciones XPath local-name() y namespace-uri(). Esta consulta XPath devuelve todos los elementos donde está Employee el nombre local y el URI del espacio de nombres es urn:myschema:Contacts:
/*[local-name() = 'Contact' and namespace-uri() = 'urn:myschema:Contacts']
En SQLXML 4.0, especifique esta consulta XPath con un prefijo de espacio de nombres. Un ejemplo es x:Contact, donde x es el prefijo del espacio de nombres. Tenga en cuenta el siguiente esquema 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>
Dado que este esquema define el espacio de nombres de destino, una consulta XPath (como "Employee") en este esquema debe incluir el espacio de nombres.
La siguiente aplicación de ejemplo de C# ejecuta una consulta XPath en el esquema XSD anterior (MySchema.xml). Para resolver el prefijo, especifique el enlace de espacio de nombres mediante la propiedad Namespaces del objeto SqlXmlCommand.
Nota:
En el código, debe proporcionar el nombre de la instancia de SQL Server en la cadena de conexión.
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;
}
}
Para probar este ejemplo, debe tener microsoft .NET Framework instalado en el equipo.
Para probar la aplicación
Guarde el esquema XSD (MySchema.xml) que se proporciona en este ejemplo en una carpeta.
Guarde el código de C# (DocSample.cs) que se proporciona en este ejemplo en la misma carpeta en la que se almacena el esquema. (Si almacena los archivos en una carpeta diferente, tendrá que editar el código y especificar la ruta de acceso de directorio adecuada para el esquema de asignación).
Compile el código. Para compilar el código en el símbolo del sistema, use:
csc /reference:Microsoft.Data.SqlXML.dll DocSample.csEsto crea un archivo ejecutable (DocSample.exe).
En el símbolo del sistema, ejecute DocSample.exe.