如何使用XMLStreamWriter确切地写出我所输入的内容?例如,如果我创建脚本标签并用javascript填充,我不希望我所有的单引号都显示为“
这是我编写的一个小测试,它没有使用我已经使用的任何抽象,只是调用了writeCharacters。
public void testWriteCharacters() {
StringWriter sw = new StringWriter();
XMLOutputFactory factory = XMLOutputFactory.newInstance();
StringBuffer out = new StringBuffer();
try {
XMLStreamWriter writer = factory.createXMLStreamWriter(sw);
writer.writeStartElement("script");
writer.writeAttribute("type","text/javascript");
writer.writeCharacters("function hw(){ \n"+
"\t alert('hello world');\n" +
"}\n");
writer.writeEndElement();
out.append(sw);
} catch (XMLStreamException e) {
} finally {
try {
sw.close();
} catch(IOException e) {
e.printStackTrace();
}
}
System.out.println(out.toString());
}
这会为围绕hello world的单引号产生一个apos实体。
最佳答案
XmlStreamWriter.writeCharacters()
不能转义'
。它仅转义<
,>
和&
,并且writeAttribute
也转义"
(请参阅javadoc)。
但是,如果您想写文本而又不逃脱,则必须使用CDATA
将其写为writeCData()
部分。
在CDATA
部分中编写脚本的典型方法是:
<script>//<![CDATA[
...
//]]></script>
那是:
out.writeCharacters("//");
out.writeCData("\n ... \n//");
关于java - XMLStreamWriter writeCharacters无需转义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2783758/