XML-Attributreihenfolge nach der DOM-Verarbeitung
Beim Arbeiten mit XML-Dateien unter Verwendung des standardmäßigen Document Object Model (DOM) wird die Attributreihenfolge während der Serialisierung beibehalten Zurück zu XML ist nicht garantiert. Dies kann in Situationen problematisch sein, in denen die Reihenfolge der Attribute entscheidend ist.
Der Grund für dieses Problem liegt im Design von DOM. Es behandelt Attribute als ungeordnete Sammlungen und ignoriert deren Reihenfolge. Wenn das XML serialisiert wird, werden die Attribute in einer willkürlichen Reihenfolge geschrieben.
Mögliche Lösungen
Es gibt zwei Ansätze, dieses Problem anzugehen:
1. Verwendung von SAX (Simple API for XML)
SAX-basierte Parser bieten im Gegensatz zu DOM eine Möglichkeit, die Attributreihenfolge beizubehalten. Durch die Verwendung eines SAX-Parsers ist es möglich, die Reihenfolge zu steuern, in der Attribute in das resultierende XML geschrieben werden.
2. Benutzerdefiniertes XSLT-Transformations-Stylesheet
Alternativ können Sie ein benutzerdefiniertes XSLT-Transformations-Stylesheet erstellen, um die gewünschte Attributreihenfolge anzugeben. Dazu gehört die Definition von Ausgabevorlagen, die die Reihenfolge der Attribute explizit angeben.
Gründe für die Beibehaltung der Attributreihenfolge
Während einige argumentieren, dass die Attributreihenfolge in XML irrelevant ist, gibt es berechtigte Gründe Gründe, es beizubehalten:
Beispiel für die Verwendung von SAX
Der folgende SAX-Codeausschnitt kann verwendet werden, um die Attributreihenfolge während der Serialisierung beizubehalten:
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 );
Das obige ist der detaillierte Inhalt vonWie kann ich die Reihenfolge der XML-Attribute nach der DOM-Verarbeitung beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!