私はXMLファイルを読み込んで変更し、別の場所にコピーする必要があります。私はドイツの特殊文字を保持し、空のタグをそのまま(セルフクローズタグにならないようにする)必要があります。自己終了タグを防止するために、私はリンクのように、Xercesのライブラリを使用: preventing empty xml elements are converted to self closing elementsxmlファイルの処理(Java)
を自分のアプリケーションでは、XMLでの私の変更は無視されている場合、コードは次のようになります。
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));
}
ソースファイルの最初の行は、問題がエンコード=「UTF-8」はREMある宛先ファイル、qwerty.xml、である
<?xml version="1.0" encoding="UTF-8"?>
ありますoved。ソースファイルでは、エンコーディングはUTF-8ですが、ドイツ語の文字のために "ISO-8859-1"と設定する必要がありました。最初の行を元のままにし、空のタグをそのまま(セルフクローズのタグではない)ままにして、ドイツ語の文字を保持したい。私のコードは、2番目と3番目のことだけを行うのに成功します。変圧器は、直列化された出力を生成している場合を除き
XmlStreamWriterは、空のタグをそのまま保持するために私が見つけた唯一の方法です(セルフクローズタグで変換したくない)。これが私が使う唯一の理由です。 –
XmlStreamWriterでシリアル化を行う場合は、使用するエンコーディングを指定する必要があります。 (なぜあなたは自己クローズタグを必要としないのか言っていませんが、受信側のアプリケーションがそれらを処理できない場合は、システム全体が非常に壊れやすくなります)XMLパーザを使用するように書き直してください。弱点。) –