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!