2012-04-28 2 views
0

XML 파일을 열고 변경 사항을 추가하고 다른 XML 파일 결과에 저장하려고합니다. 표준 javax.xml.parsers. * 및 javax.xml.transform * 클래스를 사용하고 있습니다. 변환 후 요소 속성을 교환하는 javax.xml.transform.Transformer

그러나 저장된 문서의

예를 들어, 교환하는 일부 요소의 속성 :

이 되었습니까 :

<affiliation countryCode="HU" xml:id="curr1"> 

요소 "countryCode와"와 "XML :

<affiliation xml:id="curr1" countryCode="HU"> 

그리고 변환 후

: id "가 바뀝니다.

이러한 속성 교환을 제한하는 방법은 없습니까? 열기/저장 XML의

코드 :

// Imports 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerConfigurationException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult;  


// Opening 
Document document = getDocumentBuilder().parse(src); 

// Saving 
getTransformer().transform(new DOMSource(document), new StreamResult(dst)); 

private DocumentBuilder getDocumentBuilder() throws ParserConfigurationException { 
    return documentBuilder == null ? documentBuilder = documentBuilderFactory.newDocumentBuilder() : documentBuilder; 
} 

private Transformer getTransformer() throws TransformerConfigurationException { 
    return transformer == null ? transformer = transformerFactory.newTransformer() : transformer; 
} 
+0

방법이 있는지 모르겠지만 왜 방해가됩니까? 예를 들어 나중에 파일을 비교하는 것에 대해 걱정할 경우 Altova DiffDog와 같은 우수한 XML 비교 도구를 사용하면 특성 순서를 무시할 수 있습니다. – Maestro13

+0

http://stackoverflow.com/questions/726395/order-of-xml-attributes-after-dom-processing –

+0

XML Infoset (XPath 1.0 데이터 모델)에는 "order of 속성 ". 일련 화되는 순서는 XSLT 프로세서의 구현에 따라 다릅니다. 그러나보고 된 결과가 독립적으로 재 인쇄 될 수 있도록 XSLT 코드와 가능한 가장가 까운 XML 문서를 보여 주면 직렬화 된 속성의 다른 순서가 될 수있는 리팩토링을 제안 할 수 있습니다 . –

답변

1

아니, XML의 순서를 속성 것은 중요하지 않습니다 및 XSLT가 명시 적으로 임의의 순서로 속성을보고 할 수있는 시스템을 허용하고 그 순서를 통해 더 제어 할 수 없습니다 속성이 직렬화됩니다.

관련 문제