Comment formater et lire les instructions de traitement XML à l'aide de Java StAX?

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

  •  03-07-2019
  •  | 
  •  

Question

Tout d'abord, comment formater l'instruction de traitement XML, est-ce:

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

À l'aide de StAX, je souhaite ensuite le lire en gérant XMLStreamConstants.PROCESSING_INSTRUCTION ( javadoc ), mais il ne fournit que deux méthodes pour extraire ensuite des informations sur l'instruction de traitement à partir de XMLStreamReader . :

getPITarget()
getPIData()

Le javadoc pour ces deux méthodes n’est pas très utile.

  1. Le formatage XML est-il correct?
  2. Est-ce la bonne façon de s'y prendre instructions de traitement d'analyse en utilisant le XMLStreamReader de StAX API?
  3. Comment utiliser getPITarget () et getPIData () pour renvoyer plusieurs arguments?
Était-ce utile?

La solution

  

1.Le formatage XML est-il correct?

Oui , toutefois, notez qu'un l'instruction de traitement n'a pas attributs - uniquement des données. Ce qui ressemble à des attributs fait partie des données et certaines personnes les appellent " pseudo-attributs ".

  

2.Est-ce la bonne façon d'analyser les instructions de traitement à l'aide des API StAX XMLStreamReader?

Oui.

  

3.Comment utiliser getPITarget () et getPIData () pour renvoyer plusieurs arguments?

Si par "arguments multiples" vous voulez parler des pseudo-attributs éventuellement contenus dans les données, la réponse est que votre code doit analyser les données (à l'aide de méthodes de chaîne standard telles que le C # split () , et récupérer l'ensemble des paires nom-valeur pour tous les pseudo -attributs.

Autres conseils

Je pense que cette notion de traitement des instructions ayant des attributs provient de vieux manuels xml. À un moment donné, il a été question de recommander aux IP d'honorer ou d'exiger une telle structuration. Cependant, la spécification officielle XML n'a jamais mandaté ni même recommandé une telle utilisation.

Donc, en gros, vous devez analyser le contenu vous-même - il peut avoir n'importe quel format, mais si vous savez qu'il utilise la notation d'attribut, vous pouvez l'analyser.

À ma connaissance, aucun des analyseurs syntaxiques Java xml ni des progiciels de traitement ne prend en charge une telle utilisation, malheureusement.

Bien que la réponse de Dimitre soit techniquement correcte, quelques bibliothèques populaires analysent maintenant les pseudo-attributs d'instruction de traitement comme prévu. Les exemples suivants analysent l'instruction de traitement XML suivante pour obtenir la valeur de l'attribut pseduo href :

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

JDOM2

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

saxon

Utilisation 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" ) );
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top