Heim >Java >javaLernprogramm >Wie kann ich die Reihenfolge der XML-Attribute nach der DOM-Verarbeitung beibehalten?

Wie kann ich die Reihenfolge der XML-Attribute nach der DOM-Verarbeitung beibehalten?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-14 17:59:02659Durchsuche

How can I maintain XML attribute order after DOM processing?

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:

  • Regressionstests: Die Überprüfung von XML-Ausgabeunterschieden kann bei beibehaltener Attributreihenfolge einfacher sein.
  • Menschliche Lesbarkeit: Das Beibehalten der ursprünglichen Reihenfolge der Attribute verbessert die Lesbarkeit und Wartbarkeit der XML-Datei, insbesondere bei manuell bearbeiteten Konfigurationsdateien.
  • Tools von Drittanbietern: Einige XML-Verarbeitungstools, wie z. B. XML-Editoren, kann sich auf die Attributreihenfolge verlassen, um ordnungsgemäß zu funktionieren.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn