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"로 설정해야했습니다. 첫 번째 행을 원본으로 유지하고 비어있는 태그를 그대로 유지 (자체 닫기 태그가 아닌)하고 독일어 문자를 유지하려고합니다. 내 코드는 두 번째와 세 번째 작업 만 성공합니다. 변압기 직렬 출력을 생성하지 않는 한
XmlStreamWriter는 빈 태그를 그대로 유지할 수있는 유일한 방법입니다 (셀프 닫기 태그로 변환하지 않으려는 경우). 이것이 내가 그것을 사용하는 유일한 이유이다. –
XmlStreamWriter에서 직렬화를 수행하게하려면 사용할 인코딩을 지정해야합니다. (self-closing 태그가 필요없는 이유는 말하지 않았다. 수신 응용 프로그램이 처리 할 수없는 경우 전체 시스템이 매우 약하다. XML 문서를 XML 파서를 사용하도록 다시 작성한다. 약점.) –