Como faço para formatar e ler as instruções de processamento XML usando Java StAX?
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.
- O XML a formatação correta?
- Esta é a maneira correta de ir sobre
analisar as instruções de processamento
usando o
XMLStreamReader
StAX APIs? - Como posso usar
getPITarget()
egetPIData()
para retornar vários argumentos?
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" ) );
}
}