如何使用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/

10-15 01:10