¿Cómo formateo y leo las instrucciones de procesamiento XML usando Java StAX?
Pregunta
Primero, ¿cómo formateo la instrucción de procesamiento XML?
<?processingInstructionName attribute="value" attribute2="value2"?>
Utilizando StAX, luego quiero leerlo manejando XMLStreamConstants.PROCESSING_INSTRUCTION
( javadoc ), pero solo proporciona dos métodos para recuperar información sobre la instrucción de procesamiento del XMLStreamReader
:
getPITarget()
getPIData()
El javadoc para estos dos métodos no es muy útil.
- ¿Es correcto el formato XML?
- ¿Es esta la forma correcta de hacerlo?
análisis de instrucciones de procesamiento
utilizando el StAX
XMLStreamReader
API? - ¿Cómo uso
getPITarget ()
ygetPIData ()
para devolver múltiples argumentos?
Solución
1. ¿Es correcto el formato XML?
Sí , sin embargo, tenga en cuenta que a la instrucción de procesamiento no tiene atributos : solo datos. Lo que parecen atributos son parte de los datos y algunas personas los llaman " pseudo-atributos
" ;.
2. ¿Es esta la forma correcta de analizar las instrucciones de procesamiento utilizando las API StAX XMLStreamReader?
Sí.
3. ¿Cómo uso getPITarget () y getPIData () para devolver múltiples argumentos?
Si por " argumentos múltiples " quiere decir que posiblemente haya más de un pseudo-atributos contenidos en los datos, la respuesta es que su código debe analizar los datos (usando algunos métodos de cadena estándar como C # split ()
, y recupera el conjunto de pares nombre-valor para todos los pseudo -atributos.
Otros consejos
Creo que esta noción de instrucciones de procesamiento que tienen atributos proviene de algunos antiguos manuales xml. Hubo un momento en que se discutió la recomendación de IP para honrar o requerir dicha estructuración. Sin embargo, la especificación xml oficial nunca ha ordenado ni recomendado este uso.
Entonces, básicamente, debe analizar los contenidos usted mismo; pueden estar en cualquier formato, pero si sabe que utiliza la notación de atributo, puede analizarlos.
Hasta donde yo sé, desafortunadamente ninguno de los analizadores o paquetes de procesamiento Java xml admite dicho uso.
Aunque la respuesta de Dimitre es técnicamente correcta, algunas bibliotecas populares ahora analizan los pseudoatributos de las instrucciones de procesamiento como era de esperar. Los ejemplos posteriores analizan las siguientes instrucciones de procesamiento XML para obtener el valor para el href
pseduo-attribute:
<?xml-stylesheet type="text/xsl" href="markdown.xsl"?>
JDOM2
Uso de 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" ) );
}
}
sajón
Uso de 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" ) );
}
}