Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Como uma instância do modelo de dados XPath 2.0, a classe de XPathNavigator pode conter dados fortemente tipados que mapeiam a Common Language Runtime (CLR) tipos. De acordo com o modelo de dados XPath 2.0, somente elementos e atributos podem conter dados fortemente tipados. A classe XPathNavigator fornece mecanismos para acessar dados dentro de um objeto XPathDocument ou XmlDocument como dados fortemente tipados, bem como mecanismos para converter um tipo de dados para outro.
Informações de tipo expostas por XPathNavigator
Os dados XML 1.0 são tecnicamente sem tipo, a menos que sejam processados com um esquema de DTD, XSD (linguagem de definição de esquema XML) ou outro mecanismo. Há várias categorias de informações de tipo que podem ser associadas a um elemento XML ou atributo.
Tipos CLR simples: nenhuma das linguagens de esquema XML dá suporte diretamente a tipos CLR (Common Language Runtime). Como é útil poder exibir o conteúdo de elementos e atributos simples como o tipo CLR mais apropriado, todo o conteúdo simples pode ser digitado como String na ausência de informações de esquema com qualquer informação de esquema adicionada possivelmente refinando esse conteúdo para um tipo mais apropriado. Você pode encontrar o melhor tipo CLR correspondente de elemento simples e conteúdo de atributo usando a ValueType propriedade. Para obter mais informações sobre o mapeamento de tipos internos do esquema para tipos CLR, consulte Suporte a Tipos nas Classes System.Xml.
Listas de tipos CLR (Simples): um elemento ou atributo com conteúdo simples pode conter uma lista de valores separados por espaço em branco. Os valores são especificados por um esquema XML para ser um "tipo de lista". Na ausência de um esquema XML, esse conteúdo simples seria tratado como um único nó de texto. Quando um esquema XML está disponível, esse conteúdo simples pode ser exposto como uma série de valores atômicos, cada um com um tipo simples que mapeia para uma coleção de objetos CLR. Para obter mais informações sobre o mapeamento de tipos internos do esquema para tipos CLR, consulte Suporte a Tipos nas Classes System.Xml.
Valor tipado: um atributo ou elemento com um tipo simples, validado por esquema, tem um valor tipado. Esse valor é um tipo primitivo, como um tipo numérico, cadeia de caracteres ou data. Todos os tipos simples internos em XSD podem ser mapeados para os tipos de CLR de que fornece acesso ao valor de um nó como um tipo mais apropriado em vez de apenas como String. Um elemento com atributos ou filhos do elemento é considerado ser um tipo complexo. O valor tipado de um tipo complexo com conteúdo simples (somente os nós de texto como filhos) é o mesmo que o do tipo simples de seu conteúdo. O valor tipado de um tipo complexo com conteúdo complexo (um ou mais elementos filho) é o valor da cadeia de caracteres de concatenação de todos os nós filhos de texto retornados como String. Para obter mais informações sobre o mapeamento de tipos internos do esquema para tipos CLR, consulte Suporte a Tipos nas Classes System.Xml.
Schema-Language Nome de Tipo Específico: na maioria dos casos, os tipos CLR, que são definidos como um efeito secundário da aplicação de um esquema externo, são usados para fornecer acesso ao valor de um nó. No entanto, pode haver situações em que talvez você queira examinar o tipo associado a um esquema específico aplicado a um documento XML. Por exemplo, talvez você queira pesquisar por meio de um documento XML, extraindo todos os elementos que estão determinados a ter conteúdo do tipo "PurchaseOrder" de acordo com um esquema anexado. Essas informações de tipo podem ser definidas apenas como resultado da validação do esquema, e essas informações são acessadas por meio das propriedades XmlType e SchemaInfo da classe XPathNavigator. Para obter mais informações, consulte a seção The Post Schema Validation Infoset (PSVI) a seguir.
Reflexão do tipo específico de linguagem Esquema-: Em outros casos, você pode desejar obter mais detalhes de tipo específico esquema- aplicado a um documento XML. Por exemplo, ao ler um arquivo XML, talvez você queira extrair o
maxOccursatributo para cada nó válido no documento XML para executar algum cálculo personalizado. Como essas informações são definidas somente por meio da validação de esquema, elas são acessadas por meio da SchemaInfo propriedade da XPathNavigator classe. Para obter mais informações, consulte a seção The Post Schema Validation Infoset (PSVI) a seguir.
XPathNavigator digitou acessadores
A tabela a seguir mostra as várias propriedades e métodos da XPathNavigator classe que podem ser usados para acessar as informações de tipo sobre um nó.
| Propriedade | Descrição |
|---|---|
| XmlType | Isso contém informações de tipo o esquema XML para o nó se é válido. |
| SchemaInfo | Isso contém a validação Infoset do esquema de postagem de nó que é adicionado após a validação. Isso inclui as informações de tipo de esquema XML, bem como informações de validade. |
| ValueType | O tipo de CLR de valor tipado de nó. |
| TypedValue | O conteúdo do nó como um ou mais valores de CLR cujo tipo é mais próximo correspondente ao tipo de esquema XML de nó. |
| ValueAsBoolean | O valor de String de conversão atual do nó com um valor de Boolean , de acordo com o XPath 2,0 regras para converter xs:boolean. |
| ValueAsDateTime | O valor de String de conversão atual do nó com um valor de DateTime , de acordo com o XPath 2,0 regras para converter xs:datetime. |
| ValueAsDouble | O valor de String de conversão atual do nó com um valor de Double , de acordo com o XPath 2,0 regras para converter xsd:double. |
| ValueAsInt | O valor de String de conversão atual do nó com um valor de Int32 , de acordo com o XPath 2,0 regras para converter xs:integer. |
| ValueAsLong | O valor de String de conversão atual do nó com um valor de Int64 , de acordo com o XPath 2,0 regras para converter xs:integer. |
| ValueAs | O conteúdo do nó convertem ao tipo de destino de acordo com o XPath 2,0 regras converter. |
Para obter mais informações sobre o mapeamento de tipos internos do esquema para tipos CLR, consulte Suporte a Tipos nas Classes System.Xml.
A validação Infoset (PSVI) do esquema de postagem
Um processador XML de esquema XML Infoset aceita como entrada e o converte em uma validação Infoset (PSVI) do esquema de postagem. UM PSVI é o conjunto de informações XML de entrada original com novos itens de informações adicionados e novas propriedades adicionadas aos itens de informações existentes. Há três classes amplas de informações adicionadas ao conjunto de informações XML no PSVI que são expostas pelo XPathNavigator.
Resultados de validação: informações sobre se um elemento ou atributo foi validado com êxito ou não. Isso expõe a propriedade de Validity de propriedade de SchemaInfo da classe de XPathNavigator .
Informações Padrão: indica se o valor do elemento ou atributo foi obtido por meio de valores padrão especificados no esquema ou não. Isso expõe a propriedade de IsDefault de propriedade de SchemaInfo da classe de XPathNavigator .
Anotações de tipo: referências a componentes de esquema que podem ser definições de tipo ou declarações de elemento e atributo. A propriedade de XmlType de XPathNavigator contém informações de tipo específico de nó se é válido. Se a validade de um nó é desconhecida, como quando ele foi validado em editou posteriormente. A propriedade XmlType é definida como
null, mas as informações de tipo ainda estão disponíveis nas várias propriedades da propriedade SchemaInfo da classe XPathNavigator.
O exemplo a seguir ilustra usando as informações na validação Infoset do esquema de postagem expostos por XPathNavigator.
Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.Schemas.Add("http://www.contoso.com/books", "books.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
Dim document As XmlDocument = New XmlDocument()
document.Load(reader)
Dim navigator As XPathNavigator = document.CreateNavigator()
navigator.MoveToChild("books", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
navigator.MoveToChild("published", "http://www.contoso.com/books")
Console.WriteLine(navigator.SchemaInfo.SchemaType.Name)
Console.WriteLine(navigator.SchemaInfo.Validity)
Console.WriteLine(navigator.SchemaInfo.SchemaElement.MinOccurs)
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://www.contoso.com/books", "books.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create("books.xml", settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToChild("books", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
navigator.MoveToChild("published", "http://www.contoso.com/books");
Console.WriteLine(navigator.SchemaInfo.SchemaType.Name);
Console.WriteLine(navigator.SchemaInfo.Validity);
Console.WriteLine(navigator.SchemaInfo.SchemaElement.MinOccurs);
O exemplo usa o books.xml arquivo como entrada.
<books xmlns="http://www.contoso.com/books">
<book>
<title>Title</title>
<price>10.00</price>
<published>2003-12-31</published>
</book>
</books>
O exemplo também usa o books.xsd esquema como entrada.
<xs:schema xmlns="http://www.contoso.com/books"
attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://www.contoso.com/books"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="publishedType">
<xs:restriction base="xs:date">
<xs:minInclusive value="2003-01-01" />
<xs:maxInclusive value="2003-12-31" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="bookType">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="price" type="xs:decimal"/>
<xs:element name="published" type="publishedType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="booksType">
<xs:sequence>
<xs:element name="book" type="bookType" />
</xs:sequence>
</xs:complexType>
<xs:element name="books" type="booksType" />
</xs:schema>
Obtenha valores tipados usando propriedades de ValueAs
O valor tipado de um nó pode ser recuperado acessando a propriedade de TypedValue de XPathNavigator. Em alguns casos você pode querer converter o valor tipado de um nó para um tipo diferente. Um exemplo comum é obter um valor numérico de um nó XML. Por exemplo, considere o documento XML não avaliado e não tipado a seguir.
<books>
<book>
<title>Title</title>
<price>10.00</price>
<published>2003-12-31</published>
</book>
</books>
Se o XPathNavigator estiver posicionado no elemento price, a XmlType propriedade será null, a ValueType propriedade será String, e a TypedValue propriedade será a string 10.00.
No entanto, ainda é possível extrair o valor como numérico usando o método ValueAs, ValueAsDouble, ValueAsInt ou as propriedades ValueAsLong. O exemplo a seguir ilustra executar uma conversão usando o método ValueAs .
Dim document As New XmlDocument()
document.Load("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
navigator.MoveToChild("books", "")
navigator.MoveToChild("book", "")
navigator.MoveToChild("price", "")
Dim price = navigator.ValueAs(GetType(Decimal))
Dim discount As Decimal = 0.2
Console.WriteLine("The price of the book has been dropped 20% from {0:C} to {1:C}", navigator.Value, (price - price * discount))
XmlDocument document = new XmlDocument();
document.Load("books.xml");
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToChild("books", "");
navigator.MoveToChild("book", "");
navigator.MoveToChild("price", "");
Decimal price = (decimal)navigator.ValueAs(typeof(decimal));
Console.WriteLine("The price of the book has been dropped 20% from {0:C} to {1:C}", navigator.Value, (price - price * (decimal)0.20));
Para obter mais informações sobre o mapeamento de tipos internos do esquema para tipos CLR, consulte Suporte a Tipos nas Classes System.Xml.