我有一个第三方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'lady"/>
xslt 2.0解决方案
在XSLT 2.0 中,您可以使用字符映射:
<xsl:character-map name="aposCharMap">
<xsl:output-character character="'" string="&apos;"/>
</xsl:character-map>
这将在序列化过程中用'
代替'
。