> Java > java지도 시간 > DOM 처리 후 XML에서 속성 순서를 어떻게 보존할 수 있습니까?

DOM 처리 후 XML에서 속성 순서를 어떻게 보존할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-11-14 10:32:02
원래의
508명이 탐색했습니다.

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

DOM 처리 후 XML의 속성 순서

DOM(문서 개체 모델)을 사용하여 XML 데이터를 조작할 때 속성 순서가 맞지 않을 수 있습니다. 직렬화 후에도 보존됩니다. 애플리케이션에 속성 순서를 유지하는 것이 중요한 경우 이는 문제가 됩니다.

DOM 및 속성 순서

DOM은 내부 표현에서 속성 순서를 명시적으로 유지하지 않습니다. 따라서 getAttribute() 및 getAttributes()와 같은 DOM 메소드를 사용하여 속성을 검색하면 순서가 XML 소스의 원래 순서와 다를 수 있습니다.

속성 순서 보존을 위한 SAX

DOM과 달리 SAX(Simple API for XML)는 XML 문서를 이벤트 스트림으로 탐색하는 방법을 제공합니다. SAXParser 객체를 생성하고 SAX ContentHandler를 등록하면 XML 문서의 요소, 속성 및 기타 측면과 관련된 이벤트를 추적할 수 있습니다.

SAX 사용 예

다음은 SAX를 사용하여 속성 순서를 유지하는 방법을 보여주는 Java 예제입니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿