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

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-14 10:32:02430parcourir

How Can I Preserve Attribute Order in XML After DOM Processing?

Ordre des attributs en XML après le traitement DOM

Lors de la manipulation de données XML à l'aide du modèle d'objet de document (DOM), l'ordre des attributs peut ne pas être conservé après la sérialisation. Cela pose un défi si le maintien de l'ordre des attributs est crucial pour votre application.

DOM et ordre des attributs

DOM ne maintient pas explicitement l'ordre des attributs dans sa représentation interne. Par conséquent, lorsque vous récupérez des attributs à l'aide de méthodes DOM telles que getAttribute() et getAttributes(), l'ordre peut différer de leur séquence d'origine dans la source XML.

SAX pour préserver l'ordre des attributs

Contrairement à DOM, l'API simple pour XML (SAX) fournit un moyen de parcourir le document XML sous forme de flux d'événements. En créant un objet SAXParser et en enregistrant un SAX ContentHandler, vous pouvez suivre les événements liés aux éléments, attributs et autres aspects du document XML.

Exemple d'utilisation de SAX

Voici un exemple en Java qui montre l'utilisation de SAX pour préserver l'ordre des attributs :

import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import org.xml.sax.SAXException;
import org.xml.sax.InputSource;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.XMLReader;
import org.xml.sax.ContentHandler;
import org.xml.sax.helpers.DefaultHandler;

public class PreserveAttributeOrderSAX {

    public static void main(String[] args) throws SAXException {
        SAXParserFactory spf = SAXParserFactoryImpl.newInstance();
        spf.setNamespaceAware(true);
        spf.setValidating(false);
        try {
            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();
            XMLReader reader = sp.getXMLReader();
            ContentHandler handler = new AttributeOrderContentHandler();
            reader.setContentHandler(handler);
            reader.parse(new InputSource("sample.xml"));
        } catch (SAXNotSupportedException | SAXNotRecognizedException e) {
            e.printStackTrace();
        }
    }
}

private static class AttributeOrderContentHandler extends DefaultHandler {

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        for (int i = 0; i < attributes.getLength(); i++) {
            String name = attributes.getQName(i);
            String value = attributes.getValue(i);
            // Process the attribute with its preserved order
        }
    }
}

Conclusion

Bien que DOM ne maintienne pas explicitement l'ordre des attributs, SAX propose une approche flexible. pour traiter les documents XML et conserver les attributs dans leur séquence d'origine. Cela vous permet de conserver l'ordre des attributs intact même après avoir transformé ou modifié des données XML à l'aide de l'infrastructure API XML standard de Java.

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