【发布时间】:2017-12-06 19:11:02
【问题描述】:
我有一个只能解析 XML 请求的第三方 Web 服务,其中属性中的撇号编码为 '。它拒绝像' 这样的原始撇号。此 Web 服务不关心您的论点,即 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 和 JAXP 中的序列化工具的设计假设输出将由符合标准的 XML 解析器使用。一旦您的系统中有不符合标准的组件,您的成本就会大大增加,因为其他现成的组件变得无法使用。