ホームページ > Java > &#&チュートリアル > DOM 処理後に XML 内の属性の順序を維持するにはどうすればよいですか?

DOM 処理後に XML 内の属性の順序を維持するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-14 10:32:02
オリジナル
527 人が閲覧しました

How Can I Preserve Attribute Order in XML After DOM Processing?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート