9

我想创建一个 XML,其中空白被替换为 . 但是 Java-Transformer 转义了 & 符号,所以输出是 

这是我的示例代码:

public class Test {

    public static void main(String[] args) {

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.newDocument();

        Element element = document.createElement("element");
        element.setTextContent(" ");
        document.appendChild(element);

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        StreamResult streamResult = new StreamResult(stream);
        transformer.transform(new DOMSource(document), streamResult);
        System.out.println(stream.toString());

    }

}

这是我的示例代码的输出:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<element>&amp;#160;</element>

有什么想法可以解决或避免这种情况吗?多谢!

4

4 回答 4

7

使用输出转义如下:

Node disableEscaping = document.createProcessingInstruction(StreamResult.PI_DISABLE_OUTPUT_ESCAPING, "&");
 Element element = document.createElement("element");
 element.setTextContent("&#160;");
 document.appendChild(disableEscaping );
 document.appendChild(element);
Node enableEscaping = document.createProcessingInstruction(StreamResult.PI_ENABLE_OUTPUT_ESCAPING, "&");
document.appendChild(enableEscaping )
于 2017-01-11T17:32:01.997 回答
5

将文本内容直接设置为你想要的字符,如果需要,序列化器会为你转义:

element.setTextContent("\u00A0");
于 2011-09-19T10:08:00.753 回答
1

尝试使用

element.appendChild (document.createCDATASection ("&#160;"));

代替

element.setTextContent(...);

你会在你的 xml 中得到这个:如果我正确理解你想要做什么,它可能会起作用。

于 2011-09-19T10:24:28.503 回答
0

作为四十二答案的补充:

如果像我一样,您在未打补丁的Eclipse IDE 中尝试代码,您可能会看到一些奇怪的 A 出现,而​​不是不间断的空格。这是因为 Eclipse 中控制台的编码与 Unicode (UTF-8) 不匹配。

添加-Dfile.encoding=UTF-8到你的 eclipse.ini 应该可以解决这个问题。

干杯,维姆

于 2011-09-19T11:21:34.720 回答