¿Cómo formateo y leo las instrucciones de procesamiento XML usando Java StAX?

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

  •  03-07-2019
  •  | 
  •  

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.

  1. ¿Es correcto el formato XML?
  2. ¿Es esta la forma correcta de hacerlo? análisis de instrucciones de procesamiento utilizando el StAX XMLStreamReader API?
  3. ¿Cómo uso getPITarget () y getPIData () para devolver múltiples argumentos?
¿Fue útil?

Solución

  

1. ¿Es correcto el formato XML?

, 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" ) );
  }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top