Comment formater et lire les instructions de traitement XML à l'aide de Java StAX?
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.
- Le formatage XML est-il correct?
- Est-ce la bonne façon de s'y prendre
instructions de traitement d'analyse
en utilisant le
XMLStreamReader
de StAX API? - Comment utiliser
getPITarget ()
etgetPIData ()
pour renvoyer plusieurs arguments?
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" ) );
}
}