如何获取 JDK 8 默认 XML 转换器以发出撇号的"'"



我有一个第三方Web服务,只能解析XML请求,其中属性中的postrophes编码为'。它拒绝像'这样的原始撇号。此WebService 不在乎您的论点是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"/>

xslt 2.0解决方案

在XSLT 2.0 中,您可以使用字符映射

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

这将在序列化过程中用&apos;代替'

最新更新