read manejo leer fichero desde archivos java xml stax

manejo - ¿Cómo formateo y leo las instrucciones de procesamiento XML con Java StAX?



manejo de archivos xml en java (3)

1. ¿Es correcto el formato XML?

, sin embargo , tenga en cuenta que una instrucción de procesamiento no tiene atributos , solo datos. Lo que parecen atributos son parte de los datos y algunas personas los llaman " pseudo-attributes ".

2. ¿Es esta la forma correcta de analizar las instrucciones de procesamiento utilizando las API de StAX XMLStreamReader?

Sí.

3. ¿Cómo uso getPITarget () y getPIData () para devolver múltiples argumentos?

Si por "argumentos múltiples" te refieres a posiblemente más de un pseudo-atributos contenidos en los datos, la respuesta es que tu código debe analizar los datos (usando algunos métodos de cadenas estándar como la split() C # split() , y recuperar el conjunto de nombres pares de valores para todos los pseudo-atributos.

Primero, ¿cómo formateo las instrucciones de procesamiento XML?

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

Usando StAX, quiero leerlo manejando el XMLStreamConstants.PROCESSING_INSTRUCTION ( javadoc ), pero solo proporciona dos métodos para luego recuperar información sobre las instrucciones de procesamiento de XMLStreamReader :

getPITarget() getPIData()

El javadoc para estos dos métodos no es muy útil.

  1. ¿El formato XML es correcto?
  2. ¿Es esta la manera correcta de analizar las instrucciones de procesamiento utilizando las API de StAX XMLStreamReader ?
  3. ¿Cómo uso getPITarget() y getPIData() para devolver múltiples argumentos?

Creo que esta noción de instrucciones de procesamiento con atributos proviene de algunos manuales antiguos de xml. Hubo un momento en el que se discutió la recomendación de PI para honrar o requerir tal estructuración. Sin embargo, la especificación xml oficial nunca ha ordenado ni recomendado tal uso.

Entonces, básicamente, tiene que analizar los contenidos usted mismo, pueden estar en cualquier formato, pero si sabe que utiliza la notación de atributos, puede analizarlo.

Por lo que sé, ninguno de los analizadores Java xml o paquetes de procesamiento admiten ese uso, desafortunadamente.


Aunque la respuesta de Dimitre es técnicamente correcta, algunas bibliotecas populares ahora analizan los pseudo atributos de la instrucción de procesamiento como se esperaría. Los ejemplos siguientes analizan las siguientes instrucciones de procesamiento XML para obtener el valor para el atributo href pseduo:

<?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" ) ); } }

sajón

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" ) ); } }