2016-11-15 6 views
0

私は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番目のことだけを行うのに成功します。変圧器は、直列化された出力を生成している場合を除き

答えて

0

コール

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

は効果がありません。

出力をStAXResultに送信しているため、トランスフォーマでシリアル化された出力が生成されない場合があります。なぜ出力を生成するためにXmlStreamWriterを使用しているのか分かりませんが、そのようにしたいのであれば、トランスフォーマではなくエンコーディングを決定するのはXmlStreamWriterです。

Transformerの出力をStreamResultに送信する方が簡単だったと思います。

+0

XmlStreamWriterは、空のタグをそのまま保持するために私が見つけた唯一の方法です(セルフクローズタグで変換したくない)。これが私が使う唯一の理由です。 –

+0

XmlStreamWriterでシリアル化を行う場合は、使用するエンコーディングを指定する必要があります。 (なぜあなたは自己クローズタグを必要としないのか言っていませんが、受信側のアプリケーションがそれらを処理できない場合は、システム全体が非常に壊れやすくなります)XMLパーザを使用するように書き直してください。弱点。) –