Maison  >  Article  >  Java  >  Comment puis-je conserver l’ordre des attributs XML après le traitement DOM ?

Comment puis-je conserver l’ordre des attributs XML après le traitement DOM ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-14 17:59:02600parcourir

How can I maintain XML attribute order after DOM processing?

Ordre des attributs XML après le traitement DOM

Lorsque vous travaillez avec des fichiers XML à l'aide du modèle d'objet de document (DOM) standard, maintien de l'ordre des attributs pendant la sérialisation le retour à XML n'est pas garanti. Cela peut être problématique dans les situations où l'ordre des attributs est crucial.

La raison de ce problème réside dans la conception du DOM. Il traite les attributs comme des collections non ordonnées, sans tenir compte de leur séquence. Lorsque le XML est sérialisé, les attributs sont écrits dans un ordre arbitraire.

Solutions possibles

Il existe deux approches pour résoudre ce problème :

1. L'utilisation de SAX (Simple API for XML)

Les analyseurs basés sur SAX, contrairement à DOM, fournissent un moyen de préserver l'ordre des attributs. En utilisant un analyseur SAX, il est possible de contrôler l'ordre dans lequel les attributs sont écrits dans le XML résultant.

2. Feuille de style de transformation XSLT personnalisée

Vous pouvez également créer une feuille de style de transformation XSLT personnalisée pour spécifier l'ordre des attributs souhaité. Cela implique de définir des modèles de sortie qui spécifient explicitement la séquence des attributs.

Raisons pour préserver l'ordre des attributs

Bien que certains soutiennent que l'ordre des attributs n'est pas pertinent en XML, il existe des raisons de le préserver :

  • Tests de régression : Vérification de la sortie XML les différences peuvent être plus faciles si l'ordre des attributs est conservé.
  • Lisibilité humaine : Garder les attributs dans leur ordre d'origine améliore la lisibilité et la maintenabilité du fichier XML, en particulier pour les fichiers de configuration modifiés manuellement.
  • Outils tiers : Certains outils de gestion XML, tels que les éditeurs XML, peuvent s'appuyer sur l'ordre des attributs pour un bon fonctionnement. fonctionnement.

Exemple d'utilisation de SAX

L'extrait de code SAX suivant peut être utilisé pour préserver l'ordre des attributs pendant la sérialisation :

SAXParserFactory spf = SAXParserFactoryImpl.newInstance();
spf.setNamespaceAware(true);
spf.setValidating(false);
spf.setFeature("http://xml.org/sax/features/validation", false);
spf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
SAXParser sp = spf.newSAXParser() ;
Source src = new SAXSource ( sp.getXMLReader(), new InputSource( input.getAbsolutePath() ) ) ;
String resultFileName = input.getAbsolutePath().replaceAll(".xml$", ".cooked.xml" ) ;
Result result = new StreamResult( new File (resultFileName) ) ;
TransformerFactory tf = TransformerFactory.newInstance();
Source xsltSource = new StreamSource( new File ( COOKER_XSL ) );
xsl = tf.newTransformer( xsltSource ) ;
xsl.setParameter( "srcDocumentName", input.getName() ) ;
xsl.setParameter( "srcDocumentPath", input.getAbsolutePath() ) ;

xsl.transform(src, result );

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn