如何使用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());
}
Run Code Online (Sandbox Code Playgroud)
这为围绕hello world的单引号生成了一个实体.
小智 8
你可以在工厂使用一个属性:
final XMLOutputFactory streamWriterFactory = XMLOutputFactory.newFactory();
streamWriterFactory.setProperty("escapeCharacters", false);
Run Code Online (Sandbox Code Playgroud)
然后,由于工厂支持此属性,由此工厂创建的编写器将编写字符而不转义元素中的文本.XMLOutputFactoryImpl可以.
XmlStreamWriter.writeCharacters()不逃避'.只逃脱<,>并且&和writeAttribute也逃脱"(见的javadoc).
但是,如果您想要编写文本而不进行转义,则必须将其作为一个CDATA部分使用writeCData().
在CDATA部分中编写脚本的典型方法是:
<script>//<![CDATA[
...
//]]></script>
Run Code Online (Sandbox Code Playgroud)
那是:
out.writeCharacters("//");
out.writeCData("\n ... \n//");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11908 次 |
| 最近记录: |