new XMLStreamReader(doc [, options])
Implementa um parser para leitura de documentos XML através de uma API de streaming, baseado no StAX.
O parser de modo geral consiste em:
- Um conjunto métodos de leitura que avançam de diferentes maneiras em um documento XML e retornam o tipo do token corrente.
- Um conjunto de propriedades que acessam informações do token corrente.
- Um conjunto de métodos de checagem do tipo do token corrente.
Os tipos de tokens são "Declaration", "StartElement", "EndElement", "EmptyElement", "Characters", "Comment", "ProcessingInstruction", "DoctypeDefinition", "CData", "EndDocument", "NoToken" (para quando a leitura ainda não foi iniciada) e "Error" (para indicar que houve erro na leitura).
Parameters:
Name | Type | Argument | Description |
---|---|---|---|
doc |
string | Um documento XML bem-formado. |
|
options |
XMLStreamReaderOptions |
<optional> |
Parâmetros de criação. São eles:
Os parâmetros são falsos por padrão. |
- See:
-
- module:@nginstack/engine/lib/xml/TokenType Os métodos de leitura utilizam o conceito de escopo, que pode ser o elemento corrente ou a raiz do documento. No início da leitura, o escopo é a raiz do documento. Ao encontrar um "StartElement" (`TokenType.START_ELEMENT`), o escopo passa a ser aquele elemento corrente. Ao encontrar um "EndElement" (`TokenType.END_ELEMENT`), o escopo corrente volta a ser o escopo pai daquele elemento. Uma vez que um erro seja relatado por um método de leitura, não é mais possível prosseguir com o parsing.
Example
const XMLStreamReader = require('@nginstack/engine/lib/xml/XMLStreamReader'); const example = '<?xml version="1.0"?><notes><note>Note A</note><note>Note B</note></notes>'; const reader = new XMLStreamReader(example); // Avança para o próximo token de abertura dentro do atual escopo. que seria `<notes>`. // O escopo corrente passa a ser o elemento delimitado pelas tags `<notes>` e `</notes>`. reader.readNextStartElement(); if (reader.name !== 'notes') { throw new Error('Não foi encontrada a tag "notes".'); } const notes = []; // Avança novamente ao próximo token de abertura dentro do atual escopo, // que no caso é a primeira tag `<note>` do documento. reader.readNextStartElement(); while (!reader.done && reader.name === 'note') { // Lê o token seguinte, que seria uma sequência de caracteres, e guarda o seu texto. // Observação: sempre que for possível, é recomendado que o dado seja processado em vez // de acumulado, evitando alocação de memória desnecessária. reader.readNext(); notes.push(reader.text); // Pula para o fim do elemento corrente, e depois busca o início do próximo elemento. reader.skipToNextStartElement(); } notes; // ['Note A', 'Note B']
Members
-
attributes :*
-
Se o
tokenType
forTokenType.START_ELEMENT
ouTokenType.EMPTY_ELEMENT
, a propriedade informa um objeto com os pares de nome local e valor dos atributos daquele token. A propriedades desse objeto são case insensitive.Type:
- *
-
documentEncoding :string
-
Informa a codificação utilizada do documento XML. Deve ser acessado apenas após a leitura da declaração do XML. Caso o XML não possua declaração, ou caso ainda não tenha sido lida, o leitor assumirá que o documento está codificado em UTF-8.
Type:
- string
- See:
-
documentVersion :string
-
Se o
tokenType
forTokenType.DECLARATION
, a propriedade informa a versão do documento XML.Type:
- string
- See:
-
done :boolean
-
True se a leitura tiver sido concluída.
É possível que a leitura tenha sido concluída em sucesso ou em erro. Isso pode ser verificado usando o método
hasError
.Type:
- boolean
- See:
-
error :string
-
Caso tenha ocorrido um erro na leitura, informa a string do erro. Caso contrário, informa uma string vazia.
Type:
- string
-
localName :string
-
Se
tokenType
forTokenType.START_ELEMENT
,TokenType.END_ELEMENT
ouTokenType.EMPTY_ELEMENT
, a propriedade informa o nome local do token. O nome local é o nome sem prefixo.Type:
- string
-
name :string
-
Se
tokenType
forTokenType.START_ELEMENT
,TokenType.END_ELEMENT
ouTokenType.EMPTY_ELEMENT
, a propriedade informa o nome qualificado do token. O nome qualificado é o nome exato como está na tag, incluindo o prefixo com o namespace.Type:
- string
-
namespaceUri :string
-
Se
tokenType
forTokenType.START_ELEMENT
,TokenType.END_ELEMENT
ouTokenType.EMPTY_ELEMENT
, a propriedade informa a URI associada ao namespace a que pertence o token.Type:
- string
-
prefix :string
-
Se
tokenType
forTokenType.START_ELEMENT
,TokenType.END_ELEMENT
ouTokenType.EMPTY_ELEMENT
, a propriedade informa o prefixo do nome do token.Type:
- string
-
resolvedAttributes :Array.<ResolvedAttribute>
-
Se o
tokenType
forTokenType.START_ELEMENT
ouTokenType.EMPTY_ELEMENT
, a propriedade informa uma lista com os atributos resolvidos daquele token.Cada elemento da lista é um objeto contendo as seguintes informações do atributo:
name
,localName
,prefix
,namespaceUri
evalue
.Type:
- Array.<ResolvedAttribute>
-
standaloneDocument :boolean
-
Se o
tokenType
forTokenType.DECLARATION
, a propriedade informa se o documento foi declarado como standalone.Type:
- boolean
- See:
-
text :string
-
Texto do token corrente.
Type:
- string
-
tokenType :TokenString
-
Informa o tipo do token corrente.
Type:
- TokenString
Methods
-
<static> parseFile(filePath [, options])
-
Faz o parsing diretamente sobre um arquivo XML sem carregá-lo todo em memória.
Parameters:
Name Type Argument Description filePath
string O caminho do arquivo com um documento XML bem-formado que sofrerá o parsing.
options
XMLStreamReaderOptions <optional>
Os mesmos parâmetros do construtor:
trimText
e `expandEmpty.- See:
Returns:
Uma instância do parser associada ao arquivo XML.
- Type
- XMLStreamReader
-
close()
-
Fecha o leitor interno do XMLStreamReader. Necessário chamar somente quando o reader foi criado usando
parseFile
e seja necessário liberar o arquivo imediatamente, sem aguardar que o Garbage Collector o libere no momento da destruição do reader.- See:
-
hasError()
-
Retorna true se
tokenType
for igual aTokenType.ERROR
. Isso acontece quando uma chamada a algum dos métodos de leitura resulta em erro. A string do erro pode ser acessada pela propriedadeXMLStreamReader.error
.- See:
Returns:
- Type
- boolean
-
isCData()
-
Retorna true se
tokenType
for igual aTokenType.CDATA
.- See:
Returns:
- Type
- boolean
-
isCharacters()
-
Retorna true se
tokenType
for igual aTokenType.CHARACTERS
.- See:
Returns:
- Type
- boolean
-
isComment()
-
Retorna true se
tokenType
for igual aTokenType.COMMENT
.- See:
Returns:
- Type
- boolean
-
isDeclaration()
-
Retorna true se
tokenType
for igual aTokenType.DECLARATION
.- See:
Returns:
- Type
- boolean
-
isDTD()
-
Retorna true se
tokenType
for igual aTokenType.DOCTYPE_DEFINITION
.- See:
Returns:
- Type
- boolean
-
isEmptyElement()
-
Retorna true se
tokenType
for igual aTokenType.EMPTY_ELEMENT
.- See:
Returns:
- Type
- boolean
-
isEndElement()
-
Retorna true se
tokenType
for igual aTokenType.END_ELEMENT
.- See:
Returns:
- Type
- boolean
-
isProcessingInstruction()
-
Retorna true se
tokenType
for igual aTokenType.PROCESSING_INSTRUCTION
.- See:
Returns:
- Type
- boolean
-
isStartElement()
-
Retorna true se
tokenType
for igual aTokenType.START_ELEMENT
.- See:
Returns:
- Type
- boolean
-
readNext()
-
Método de leitura padrão. Prossegue o parsing, retornando o próximo token.
Returns:
token lido.
- Type
- TokenString
-
readNextStartElement()
-
Prossegue o parsing até encontrar um token de abertura (
TokenType.START_ELEMENT
) dentro do atual escopo. A busca para caso chegue ao fim do escopo.Returns:
token em que busca foi encerrada.
- Type
- TokenString
-
skipCurrentElement()
-
Prossegue o parsing até chegar ao fim do escopo corrente, que pode ser o token de fechamento correspondente (
TokenType.END_ELEMENT
) ou o fim do documento (TokenType.END_DOCUMENT
).Returns:
token em que a busca foi encerrada.
- Type
- TokenString
-
skipToNextStartElement()
-
Equivale a chamar
skipCurrentElement
ereadNextStartElement
em sequência.Na prática, prossegue o parsing até encontrar o próximo elemento irmão ou até chegar ao final do escopo pai.
Returns:
token em que a busca foi encerrada
- Type
- TokenString