我在 Java 中使用 org.w3c.dom.Document 并插入 EntityReference 节点。这些添加正常,但被 javax.xml.transform.Transformer 删除。这段代码解释了我的意思:
DOMImplementation dmi = DOMImplementationRegistry.newInstance().getDOMImplementation("");
Document doc = dmi.createDocument(null, "html", null);
doc.getDocumentElement().appendChild(doc.createTextNode("AT"));
doc.getDocumentElement().appendChild(doc.createEntityReference("amp"));
doc.getDocumentElement().appendChild(doc.createTextNode("T"));
Transformer tr = TransformerFactory.newInstance().newTransformer();
tr.setOutputProperty(OutputKeys.METHOD, "html");
tr.transform(new DOMSource(doc), new StreamResult(System.out));
这个的输出是
<html>ATT</html>
而且我要
<html>AT&T</html>
我知道如果我doc.createTextNode("AT&T")
直接这样做,它会为我逃脱“&”,所以我正在寻找一种方法
- 保留我的 EntityReferences,或
- 让我查找定义的实体,或者
- 填写实体的文本作为 EntityReference 的子项。
我必须处理实体引用名称,因为我必须实现一个看起来像
interface Xxx {
void addText(String text);
void addEntity(String entName);
...
}