1

CSV を XML に変換してから、OutputStream に変換する必要があります。ルールは、私のコードで変換"することです。"

入力 CSV 行:

{"Test":"Value"}

期待される出力:

<root>
<child>{&quot;Test&quot;:&quot;Value&quot;}</child>
<root>

現在の出力:

<root>
<child>{&amp;quot;Test&amp;quot;:&amp;quot;Value&amp;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()))

助けていただけますか?私が見逃しているものとに&変換するときは&amp;?

4

1 に答える 1

1

XML ライブラリは、XML エスケープが必要な文字列を自動的にエスケープするため、 を使用して手動でエスケープする必要はありませんStringEscapeUtils.escapeXml。その行を削除するだけで、適切にエスケープされた XMLを探しているものを正確に取得できます。

XML では、どこでも文字をエスケープする必要はなく"、属性値内でのみエスケープする必要があります。したがって、これはすでに有効な XML です。

<root>
<child>{"Test":"Value"}</child>
<root>

次のような引用符を含む属性がある場合は、引用符をエスケープします。<child attr="properly &quot;ed"/>

これが XML ライブラリを使用する主な理由の 1 つです。引用の微妙な部分は既に処理されています。引用規則が正しいことを確認するためにXML 仕様を読む必要はありません。

于 2016-09-13T00:57:36.257 に答える