Rumah  >  Artikel  >  Java  >  Bagaimanakah Saya Boleh Mengekalkan Pesanan Atribut dalam XML Selepas Pemprosesan DOM?

Bagaimanakah Saya Boleh Mengekalkan Pesanan Atribut dalam XML Selepas Pemprosesan DOM?

Linda Hamilton
Linda Hamiltonasal
2024-11-14 10:32:02430semak imbas

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

Tertib Atribut dalam XML selepas Pemprosesan DOM

Apabila memanipulasi data XML menggunakan Model Objek Dokumen (DOM), susunan atribut mungkin tidak dipelihara selepas bersiri. Ini menimbulkan cabaran jika mengekalkan susunan atribut adalah penting untuk aplikasi anda.

DOM dan Susunan Atribut

DOM tidak secara eksplisit mengekalkan susunan atribut dalam perwakilan dalamannya. Oleh itu, apabila anda mendapatkan semula atribut menggunakan kaedah DOM seperti getAttribute() dan getAttributes(), susunan mungkin berbeza daripada urutan asalnya dalam sumber XML.

SAX untuk Memelihara Susunan Atribut

Tidak seperti DOM, API Mudah untuk XML (SAX) menyediakan cara untuk melintasi dokumen XML sebagai aliran peristiwa. Dengan mencipta objek SAXParser dan mendaftarkan SAX ContentHandler, anda boleh menjejaki peristiwa yang berkaitan dengan elemen, atribut dan aspek lain dokumen XML.

Contoh menggunakan SAX

Berikut ialah contoh dalam Java yang menunjukkan penggunaan SAX untuk mengekalkan atribut pesanan:

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
        }
    }
}

Kesimpulan

Walaupun DOM mungkin tidak mengekalkan susunan atribut secara eksplisit, SAX menawarkan pendekatan yang fleksibel untuk memproses dokumen XML dan mengekalkan atribut dalam urutan asalnya. Ini membolehkan anda mengekalkan susunan atribut secara utuh walaupun selepas mengubah atau mengubah suai data XML menggunakan infrastruktur API XML standard Java.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Pesanan Atribut dalam XML Selepas Pemprosesan DOM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn