Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
As consultas XPath podem incluir namespaces. Se os elementos do esquema forem qualificados para namespace (usar um namespace de destino), as consultas XPath contra o esquema devem especificar o namespace.
Como o carácter coringa (*) não é suportado no Microsoft SQLXML 4.0, deve especificar a consulta XPath usando um prefixo de namespace. Para resolver o prefixo, use a propriedade de namespaces para especificar a ligação ao namespace.
No exemplo seguinte, a consulta XPath especifica namespaces usando o carácter curinga (*) e as funções local-name() e namespace-uri() XPath. Esta consulta XPath devolve todos os elementos onde o nome local é Employee e o URI do espaço de nomes é urn:myschema:Contacts:
/*[local-name() = 'Contact' and namespace-uri() = 'urn:myschema:Contacts']
No SQLXML 4.0, especifique esta consulta XPath com um prefixo de namespace. Um exemplo é x:Contact, onde x é o prefixo do namespace. Considere o seguinte 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>
Como este esquema define o namespace de destino, uma consulta XPath (como "Employee") contra este esquema deve incluir o namespace.
A seguinte aplicação de exemplo C# executa uma consulta XPath contra o esquema XSD anterior (MySchema.xml). Para resolver o prefixo, especifique a ligação ao namespace usando a propriedade Namespaces do objeto SqlXmlCommand.
Observação
No código, deve fornecer o nome da instância do SQL Server na cadeia de conexão.
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 testar este exemplo, deve ter o Microsoft .NET Framework instalado no seu computador.
Para testar a aplicação
Guarde o esquema XSD (MySchema.xml) fornecido neste exemplo numa pasta.
Guarde o código C# (DocSample.cs) fornecido neste exemplo na mesma pasta onde o esquema está armazenado. (Se guardar os ficheiros numa pasta diferente, terá de editar o código e especificar o caminho de diretório apropriado para o esquema de mapeamento.)
Compila o código. Para compilar o código no prompt de comandos, use:
csc /reference:Microsoft.Data.SqlXML.dll DocSample.csIsto cria um executável (DocSample.exe).
No prompt de comandos, execute DocSample.exe.