CSVをXMLに変換してからOutputStreamに変換する必要があります。ルールは"
を私のコードで"
に変換することです。Javaで正しいXMLエスケープ
入力CSV行:
{"Test":"Value"}
予想される出力:
<root>
<child>{"Test":"Value"}</child>
<root>
電流出力:
<root>
<child>{&quot;Test&quot;:&quot;Value&quot;}</child>
<root>
コード:
File file = new File(FilePath);
BufferedReader reader = null;
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder domBuilder = domFactory.newDocumentBuilder();
Document newDoc = domBuilder.newDocument();
Element rootElement = newDoc.createElement("root");
newDoc.appendChild(rootElement);
reader = new BufferedReader(new FileReader(file));
String text = null;
while ((text = reader.readLine()) != null) {
Element rowElement = newDoc.createElement("child");
rootElement.appendChild(rowElement);
text = StringEscapeUtils.escapeXml(text);
rowElement.setTextContent(text);
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Source xmlSource = new DOMSource(newDoc);
Result outputTarget = new StreamResult(outputStream);
TransformerFactory.newInstance().newTransformer().transform(xmlSource, outputTarget);
System.out.println(new String(baos.toByteArray()))
助けてくれますか?私が逃したのはいつですか?&
は&
に変換されますか?
ダブルエスケープしています。 DOMはあなたのためにエスケープしますが、あなたもエスケープします。 'StringEscapeUtils.escapeXml(text)'への呼び出しを削除します。 – Andreas
私はこれについてお読みしました。奇妙なことに、エスケープを取り除いた後、エスケープが全く起こらないということです。 – user3305630
'' 'で引用された値を持つ属性で' ''をエスケープするだけでよいので、これは有効なXMLです: ''。 '>'は ']]'(CDATAターミネータ ']]>')のようにクォートする必要があるだけで、 '>'は常に ''と '&'の文字を引用符で囲む必要があります通常は常に引用されます。 –
Andreas