DOM 처리 후 XML 속성 순서
표준 DOM(문서 개체 모델)을 사용하여 XML 파일 작업 시 직렬화 중에 속성 순서 유지 XML로 돌아가는 것은 보장되지 않습니다. 이는 속성 순서가 중요한 상황에서 문제가 될 수 있습니다.
이 문제의 원인은 DOM 설계에 있습니다. 속성은 순서를 무시하고 순서가 지정되지 않은 컬렉션으로 처리됩니다. XML이 직렬화되면 속성이 임의의 순서로 작성됩니다.
가능한 해결 방법
이 문제를 해결하는 데는 두 가지 접근 방식이 있습니다.
1. SAX(Simple API for XML)
DOM과 달리 SAX 기반 파서를 사용하면 속성 순서를 유지하는 방법을 제공합니다. SAX 파서를 활용하면 결과 XML에 속성이 기록되는 순서를 제어할 수 있습니다.
2. 사용자 정의 XSLT 변환 스타일시트
또는 사용자 정의 XSLT 변환 스타일시트를 생성하여 원하는 속성 순서를 지정할 수 있습니다. 여기에는 속성 순서를 명시적으로 지정하는 출력 템플릿 정의가 포함됩니다.
속성 순서를 보존하는 이유
어떤 사람들은 속성 순서가 XML에서 관련이 없다고 주장하지만, 정당한 이유가 있습니다. 보존 이유:
SAX 사용 예
다음 SAX 코드 조각을 사용하여 직렬화 중에 속성 순서를 유지할 수 있습니다.
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 );
위 내용은 DOM 처리 후 XML 속성 순서를 어떻게 유지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!