Como faço para formatar e ler as instruções de processamento XML usando Java StAX?

StackOverflow https://stackoverflow.com/questions/404141

  •  03-07-2019
  •  | 
  •  

Pergunta

Em primeiro lugar, como faço para formatar a instrução de processamento XML, é:

<?processingInstructionName attribute="value" attribute2="value2"?>

Usando StAX, então eu quero lê-lo pela manipulação do XMLStreamConstants.PROCESSING_INSTRUCTION ( javadoc ) evento, mas só fornece dois métodos para, em seguida, recuperar informações sobre a instrução de processamento do XMLStreamReader:

getPITarget()
getPIData()

O javadoc por estes dois métodos não é muito útil.

  1. O XML a formatação correta?
  2. Esta é a maneira correta de ir sobre analisar as instruções de processamento usando o XMLStreamReader StAX APIs?
  3. Como posso usar getPITarget() e getPIData() para retornar vários argumentos?
Foi útil?

Solução

1.Is o XML formatação correta?

Sim , no entanto Note que a instrução de processamento não tem atributos > pseudo-attributes".

2.Is esta a maneira correta de ir sobre análise de instruções de processamento utilizando o XMLStreamReader APIs StAX?

Sim.

3.How eu uso getPITarget () e getPIData () para retornar vários argumentos?

Se por "múltiplos argumentos" você quer dizer o possivelmente mais de um pseudo-atributos contidos nos dados, a resposta é que seu código deve analisar os dados (o uso de alguns métodos de string padrão como o C # split() , e recuperar o conjunto de pares nome-valor para todos pseudo -attributes.

Outras dicas

Eu acho que essa noção de processar instruções que têm atributos vem de alguns manuais xml idade. Em um ponto houve discussão de recomendar PIs a honra ou exigir tal estruturação. No entanto, a especificação oficial xml nunca mandatada ou mesmo recomendado essa utilização.

Então, basicamente você tem que conteúdos de análise de si mesmo -. Eles podem estar em qualquer formato, mas se você sabe que ele usa atributo notação você pode analisá-lo

Tanto quanto eu sei, nenhum dos analisadores XML Java ou pacotes de processamento de apoiar tal uso, infelizmente.

Apesar de resposta de Dimitre é tecnicamente correto, algumas bibliotecas populares agora instrução de processamento de análise pseudo-atributos como seria de esperar. Os exemplos subsequentes analisar a seguinte instrução de processamento XML para obter o valor para o pseduo-atributo href:

<?xml-stylesheet type="text/xsl" href="markdown.xsl"?>

JDOM2

Usando JDOM2 :

import org.jdom2.ProcessingInstruction;
import org.xml.sax.helpers.DefaultHandler;

public class ProcessingInstructionHandler extends DefaultHandler {

  @Override
  public void processingInstruction( final String target, final String data ) {
    final ProcessingInstruction pi = new ProcessingInstruction( target, data );
    System.out.println( pi.getPseudoAttributeValue( "href" ) );
  }
}

Saxon

Usando Saxon :

import static net.sf.saxon.tree.util.ProcInstParser.getPseudoAttribute;
import org.xml.sax.helpers.DefaultHandler;

public class ProcessingInstructionHandler extends DefaultHandler {

  @Override
  public void processingInstruction( final String target, final String data ) {
    System.out.println( getPseudoAttribute( data, "href" ) );
  }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top