当我在写入XML文件的文本中有一个不间断的空格(在HTML中为�A;/amp;nbsp;(时,我希望对其进行转义,以便在XML中看到它不是一个常规空格。
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element element = document.createElement("Foo");
document.appendChild(element);
element.appendChild(document.createTextNode("Au00A0B"));
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
transformer.transform(new DOMSource(document), new StreamResult(new FileWriter("test.xml")));
创建
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Foo>A B</Foo>
但我希望是
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Foo>A&#A0;B</Foo>
是否有任何设置可以传递给Transformer以强制执行此操作?我不想使用CDATA部分,因为那样我就必须使用'&A0;'序列,并在我显示该字符串时处理它。
在XSLT2.0+中,您可以使用字符映射
<xsl:output use-character-map="visible-spaces">
<xsl:character-map name="visible-spaces">
<xsl:output-character character=" " string="&npsp;"/>
<xsl:output-character character="
" string="&nl;"/>
</xsl:character-map>
如果以这种方式生成命名实体引用,则需要确保结果文档引用定义这些实体的DTD,这可能需要一些后处理。
XSLT1.0中最接近的等效方法是使用禁用输出转义破解,但这意味着要更改代码中输出这些字符的每个位置。