如何让JDK 8默认XML转换器为撇号

时间:2017-12-06 19:11:02

标签: java xml entity

我有一个第三方Web服务,它只能解析XML请求,其中属性中的撇号被编码为'。它拒绝像'这样的原始撇号。这个网络服务并不关心您的论点,即XML标准允许在由双引号分隔的属性值中使用撇号。它想要'

我想使用标准的Java XML转换器为这些请求生成XML。它不会将'编码为'。我该怎么做呢?

示例程序:

class test {
    public static void main(String args[]) throws Exception {
        final org.w3c.dom.Document doc = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
        final org.w3c.dom.Element tag = doc.createElement("fedora");
        tag.setAttribute("tip", "m'lady");
        doc.appendChild(tag);
        doc.setXmlStandalone(true);
        final javax.xml.transform.Transformer t = javax.xml.transform.TransformerFactory.newInstance().newTransformer();
        t.setOutputProperty(javax.xml.transform.OutputKeys.VERSION, "1.0");
        t.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "UTF-8");
        t.setOutputProperty(javax.xml.transform.OutputKeys.STANDALONE, "yes");
        t.transform(new javax.xml.transform.dom.DOMSource(doc),
                    new javax.xml.transform.stream.StreamResult(new java.io.PrintWriter(System.out)));
    }
}

它发出的内容:<?xml version="1.0" encoding="UTF-8" standalone="no"?><fedora tip="m'lady"/>

我希望它发出什么:<?xml version="1.0" encoding="UTF-8" standalone="no"?><fedora tip="m&apos;lady"/>

1 个答案:

答案 0 :(得分:0)

XSLT 2.0解决方案

在XSLT 2.0+中,您可以使用character maps

<xsl:character-map name="aposCharMap">
  <xsl:output-character character="'" string="&amp;apos;"/>
</xsl:character-map>

这将在序列化期间用&apos;替换'