Tertib Atribut XML Selepas Pemprosesan DOM
Apabila bekerja dengan fail XML menggunakan Model Objek Dokumen (DOM) standard, mengekalkan susunan atribut semasa bersiri kembali kepada XML tidak dijamin. Ini boleh menjadi masalah untuk situasi yang tertib atribut adalah penting.
Sebab di sebalik isu ini terletak pada reka bentuk DOM. Ia menganggap atribut sebagai koleksi tidak tersusun, mengabaikan urutannya. Apabila XML bersiri, atribut ditulis dalam susunan sewenang-wenangnya.
Penyelesaian Kemungkinan
Terdapat dua pendekatan untuk menangani isu ini:
1. Menggunakan SAX (API Mudah untuk XML)
penghurai berasaskan SAX, tidak seperti DOM, menyediakan cara untuk mengekalkan susunan atribut. Dengan menggunakan penghurai SAX, adalah mungkin untuk mengawal jujukan atribut ditulis pada XML yang terhasil.
2. Lembaran Gaya Transformasi XSLT Tersuai
Sebagai alternatif, anda boleh mencipta lembaran gaya transformasi XSLT tersuai untuk menentukan susunan atribut yang diingini. Ini melibatkan penentuan templat output yang menyatakan secara eksplisit urutan atribut.
Sebab Mengekalkan Susunan Atribut
Walaupun sesetengah pihak berpendapat bahawa susunan atribut tidak relevan dalam XML, terdapat sah sebab untuk mengekalkannya:
Contoh Menggunakan SAX
Coretan kod SAX berikut boleh digunakan untuk mengekalkan susunan atribut semasa bersiri:
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 );
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengekalkan susunan atribut XML selepas pemprosesan DOM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!