DOM 処理後の XML の属性の順序
ドキュメント オブジェクト モデル (DOM) を使用して XML データを操作する場合、属性の順序が正しくならない場合があります。連載後も保存されます。属性の順序を維持することがアプリケーションにとって重要である場合、これは課題となります。
DOM と属性の順序
DOM は、内部表現で属性の順序を明示的に維持しません。したがって、getAttribute() や getAttributes() などの DOM メソッドを使用して属性を取得すると、順序が XML ソース内の元の順序と異なる場合があります。
属性の順序を保持するための SAX
DOM とは異なり、Simple API for XML (SAX) は、XML ドキュメントをストリームとして走査する方法を提供します。イベント。 SAXParser オブジェクトを作成し、SAX ContentHandler を登録すると、要素、属性、および XML ドキュメントのその他の側面に関連するイベントを追跡できます。
SAX を使用した例
SAX を使用して属性を保持することを示す Java の例を次に示します。 order:
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 } } }
結論
DOM は属性の順序を明示的に維持できない場合がありますが、SAX は XML ドキュメントを処理し、元の順序で属性を保持するための柔軟なアプローチを提供します。これにより、Java の標準 XML API インフラストラクチャを使用して XML データを変換または変更した後でも、属性の順序をそのまま維持できます。
以上がDOM 処理後に XML 内の属性の順序を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。