Come formattare e leggere le istruzioni di elaborazione XML utilizzando Java StAX?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Innanzitutto, come formattare l'istruzione di elaborazione XML, è:

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

Utilizzando StAX, voglio quindi leggerlo gestendo il XMLStreamConstants.PROCESSING_INSTRUCTION ( javadoc ), ma fornisce solo due metodi per recuperare informazioni sull'istruzione di elaborazione dal XMLStreamReader :

getPITarget()
getPIData()

javadoc per questi due metodi non è molto utile.

  1. La formattazione XML è corretta?
  2. È questo il modo corretto di procedere analisi delle istruzioni di elaborazione utilizzando il XMLStreamReader StAX API?
  3. Come posso usare getPITarget () e getPIData () per restituire più argomenti?
È stato utile?

Soluzione

  

1. La formattazione XML è corretta?

, tuttavia si noti che a istruzioni di elaborazione non ha attributi - solo dati. Ciò che sembra attributi fanno parte dei dati e alcune persone li chiamano " pseudo-attributi " ;.

  

2.È questo il modo corretto di analizzare le istruzioni di elaborazione usando le API StAX XMLStreamReader?

Sì.

  

3.Come utilizzo getPITarget () e getPIData () per restituire più argomenti?

Se con " argomenti multipli " intendi forse più di uno pseudo-attributi contenuti nei dati, la risposta è che il tuo codice deve analizzare i dati (usando alcuni metodi stringa standard come C # split () e recupera il set di coppie nome-valore per tutti gli pseudo -attributes.

Altri suggerimenti

Penso che questa nozione di istruzioni di elaborazione con attributi provenga da alcuni vecchi manuali xml. Ad un certo punto si è discusso di raccomandare ai PI di onorare o richiedere tale strutturazione. Tuttavia, la specifica XML ufficiale non ha mai richiesto o addirittura raccomandato tale utilizzo.

Quindi, fondamentalmente, devi analizzare tu stesso i contenuti - possono essere in qualsiasi formato, ma se sai che usa la notazione degli attributi puoi analizzarli.

Per quanto ne so, nessuno dei parser xml Java o pacchetti di elaborazione supporta tale utilizzo, sfortunatamente.

Sebbene la risposta di Dimitre sia tecnicamente corretta, alcune librerie popolari ora analizzano gli pseudo-attributi delle istruzioni di elaborazione come ci si aspetterebbe. Gli esempi seguenti analizzano le seguenti istruzioni di elaborazione XML per ottenere il valore dell'attributo pseduo href :

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

JDOM2

Utilizzo di 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

Uso di 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" ) );
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top