System.Xml.XmlTextReader classe

Observação

Este artigo fornece observações complementares à documentação de referência para esta API.

Observação

Recomendamos que crie instâncias XmlReader usando o método XmlReader.Create para aproveitar a nova funcionalidade.

XmlTextReader fornece acesso apenas para a frente e apenas de leitura a um fluxo de dados XML. O nó atual refere-se ao nó em que o leitor está posicionado. O leitor é avançado usando qualquer um dos métodos de leitura e as propriedades refletem o valor do nó atual.

Essa classe implementa XmlReader e está em conformidade com a W3C Extensible Markup Language (XML) 1.0 e as recomendações de Namespaces em XML. XmlTextReader fornece a seguinte funcionalidade:

  • Impõe as regras de XML bem formadas.

  • XmlTextReader não fornece validação de dados.

  • Verifica se os nós DocumentType estão bem formados. XmlTextReader verifica se o DTD está bem formado, mas não valida usando o DTD.

  • Para nodos em que NodeType é XmlNodeType.EntityReference, um único nodo vazio EntityReference será retornado (ou seja, a propriedade Value é String.Empty).

Observação

As declarações reais de entidades no DTD são denominadas nós Entity. Quando se refere a esses nós nos seus dados, são chamados nós EntityReference.

  • Não expande atributos padrão.

Como o XmlTextReader não executa as verificações extras necessárias para a validação de dados, ele fornece um analisador rápido e bem formado.

Para executar a validação de dados, use um XmlReader validador.

Para ler dados XML de um XmlDocument, use XmlNodeReader.

XmlTextReader lança um XmlException em erros de parsing XML. Depois que uma exceção é lançada, o estado do leitor não é previsível. Por exemplo, o tipo de nó relatado pode ser diferente do tipo real do nó atual. Use a ReadState propriedade para verificar se um leitor está em estado de erro.

Considerações de segurança

A seguir estão as coisas a considerar ao usar a XmlTextReader classe.

  • As exceções lançadas pelo XmlTextReader podem divulgar informações de caminho que não desejas que sejam propagadas para a aplicação. Seus aplicativos devem detetar exceções e processá-las adequadamente.

  • O processamento DTD está habilitado por padrão. Desative o processamento DTD se estiver preocupado com problemas de Negação de Serviço ou se estiver lidando com fontes não confiáveis. Defina a propriedade DtdProcessing como Prohibit para desativar o processamento DTD.

    Se você tiver o processamento DTD habilitado, poderá usar o XmlSecureResolver para restringir os recursos que o XmlTextReader pode acessar. Você também pode projetar seu aplicativo para que o processamento XML seja restrito de memória e tempo. Por exemplo, configure limites de tempo na sua aplicação ASP.NET.

  • Os dados XML podem incluir referências a recursos externos, como um arquivo DTD. Por padrão, os recursos externos são resolvidos usando um XmlUrlResolver objeto sem credenciais de usuário. Você pode proteger isso ainda mais seguindo um destes procedimentos:

  • Os dados XML podem conter um grande número de atributos, declarações de namespace, elementos aninhados e assim por diante que exigem uma quantidade substancial de tempo para serem processados. Para limitar o tamanho da entrada que é enviada para o XmlTextReader, crie uma implementação IStream personalizada e forneça-lhe o XmlTextReader.

  • O método ReadValueChunk pode ser usado para lidar com grandes fluxos de dados. Esse método lê um pequeno número de caracteres de cada vez em vez de alocar uma única cadeia de caracteres para o valor inteiro.

  • Por padrão, as entidades gerais não são expandidas. As entidades gerais são expandidas quando você chama o ResolveEntity método.