2016-11-15 8 views
0

XML 파일을 읽고 변경 한 다음 다른 위치로 복사해야합니다. 또한 독일어 특수 문자를 유지하고 빈 태그를 그대로 유지해야합니다 (자동 닫기 태그가되지 못하게).XML 파일 처리 (Java)

public static void main(String args[]) throws Exception { 
    InputStream inputStream= new FileInputStream(new File("D:\\qwe.xml")); 
    Reader reader = new InputStreamReader(inputStream,"ISO-8859-1"); 
    InputSource is = new InputSource(reader); 
    is.setEncoding("ISO-8859-1"); 

    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder; 
    dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(is); 
    doc.setXmlStandalone(true); 

    File file = new File ("D:\\qwerty.xml"); 
    XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(new FileOutputStream(file)); 
    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1") ; 
    transformer.transform(new DOMSource(doc), new StAXResult(writer)); 

}

: XML 내 변화는 무시하는 경우 가 preventing empty xml elements are converted to self closing elements

내 응용 프로그램에서 코드는 다음과 같습니다 자체 닫는 태그를 방지하기 위해, 나는 링크에로의 Xerces 라이브러리를 사용

소스 파일의 첫 번째 행이 문제는 대상 파일에

<?xml version="1.0" encoding="UTF-8"?> 

이다 qwerty.xml, 인코딩 = "UTF-8"REM은 어디 oved. 소스 파일에서 인코딩은 UTF-8이지만 독일어 문자 때문에 "ISO-8859-1"로 설정해야했습니다. 첫 번째 행을 원본으로 유지하고 비어있는 태그를 그대로 유지 (자체 닫기 태그가 아닌)하고 독일어 문자를 유지하려고합니다. 내 코드는 두 번째와 세 번째 작업 만 성공합니다. 변압기 직렬 출력을 생성하지 않는 한

답변

0

Transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1"); 

은 효과가 없다.

결과를 StAXResult로 보내므로 변압기에서 직렬화 된 출력을 생성하지 않습니다. 왜 출력을 생성하기 위해 XmlStreamWriter를 사용하는지 잘 모르겠지만 그렇게하고 싶다면 Transformer가 아닌 인코딩을 결정하는 XmlStreamWriter입니다.

Transformer 출력을 StreamResult에 보내는 것이 더 간단하다고 생각했을 것입니다.

+0

XmlStreamWriter는 빈 태그를 그대로 유지할 수있는 유일한 방법입니다 (셀프 닫기 태그로 변환하지 않으려는 경우). 이것이 내가 그것을 사용하는 유일한 이유이다. –

+0

XmlStreamWriter에서 직렬화를 수행하게하려면 사용할 인코딩을 지정해야합니다. (self-closing 태그가 필요없는 이유는 말하지 않았다. 수신 응용 프로그램이 처리 할 수없는 경우 전체 시스템이 매우 약하다. XML 문서를 XML 파서를 사용하도록 다시 작성한다. 약점.) –