Classe System.Xml.XmlTextReader
Este artigo fornece observações complementares à documentação de referência para essa API.
Observação
Recomendamos que você crie instâncias XmlReader usando o método XmlReader.Create para aproveitar a nova funcionalidade.
XmlTextReader fornece acesso somente encaminhamento e somente leitura para um fluxo de dados XML. O nó atual refere-se ao nó em que o leitor está localizado. 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 Linguagem XML (XML) 1.0 do W3C e com as recomendações de Namespaces em XML. XmlTextReader
oferece a seguinte funcionalidade:
Aplica as regras do XML bem formado.
XmlTextReader
não fornece validação de dados.Verifica se os nós
DocumentType
estão bem formados.XmlTextReader
verifica se a DTD está bem formada, mas não valida usando a DTD.Para nós em que NodeType é
XmlNodeType.EntityReference
, um único nóEntityReference
vazio é retornado (ou seja, a propriedade Value éString.Empty
).
Observação
As declarações reais de entidades na DTD são chamadas de nós Entity
. Quando você se refere a esses nós em seus dados, eles são chamados de nós EntityReference
.
- Não expande os atributos padrão.
Como o XmlTextReader
não realiza as verificações extras necessárias para a validação de dados, ele fornece um analisador rápido de boa formação.
Para executar a validação de dados, use um XmlReader de validação.
Para ler dados XML de um XmlDocument, use XmlNodeReader.
XmlTextReader
gera um XmlException em erros de análise de XML. Depois que uma exceção é gerada, o estado do leitor não é previsível. Por exemplo, o tipo de nó informado pode ser diferente do tipo de nó real do nó atual. Use a propriedade ReadState para verificar se um leitor está em estado de erro.
Considerações de segurança
Veja a seguir os aspectos a serem considerados ao utilizar a classe XmlTextReader.
As exceções geradas com XmlTextReader podem revelar informações sobre o caminho que você não deseja que sejam propagadas para aplicativo. Os aplicativos devem capturar exceções e processar-las apropriadamente.
O processamento de DTD é ativado por padrão. Desabilite o processamento de 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 desabilitar o processamento de DTD.
Se você tiver o processamento de DTD ativado, você pode usar XmlSecureResolver para restringir os recursos que XmlTextReader pode acessar. Você também pode criar seu aplicativo para que processar XML é memória e hora restritos. Por exemplo, configurar limites de tempo limite no seu aplicativo ASP.NET.
Os dados XML podem incluir referências a recursos externos, como um arquivo DTD. Os recursos externos são determinados por padrão usando um objeto de XmlUrlResolver sem credenciais do usuário. Você pode proteger este adicional seguindo um destes procedimentos:
Restringir os recursos que XmlTextReader pode acessar definindo a propriedade de XmlResolver a um objeto de XmlSecureResolver .
Não permita que XmlReader abra os recursos externos definindo a propriedade de XmlResolver a
null
.
Os dados XML podem conter um grande número de declarações de atributos, namespace, elementos aninhados e assim por diante que exigem um montante considerável de tempo de processamento. Para limitar o tamanho da entrada enviada para XmlTextReader, crie uma implementação personalizada de IStream e forneça a XmlTextReader.
O método ReadValueChunk pode ser utilizado para lidar com grandes fluxos de dados. Este método lê um pequeno número de caracteres de cada vez em vez de atribuir uma única cadeia de caracteres para o valor inteiro.
As entidades gerais não são expandidos por padrão. As entidades gerais são expandidas quando você chama o método de ResolveEntity .