使用xerces和Java构建DOM - 如何防止&符号的转义

时间:2012-02-11 20:37:57

标签: xml-serialization xerces

我在Java中使用xerces来构建DOM。对于成为DOM中的文本节点的字段之一,数据从已经将任何非ASCII和/或XML特殊字符转换为其实体名称或数字的源传送,例如, “Banana和安培;#174;”

我知道系统的设计是错误的,数据源不应该这样做,但这是我无法控制的,但我想知道的是,是否有办法以某种方式防止这种情况被转义和变成了“Banana& amp;#174;”没先解码? (我知道它会隐式转换它需要的任何字符,所以我可以在解码后输入原始字符。)

示例代码:

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();      
    DocumentBuilder db = dbf.newDocumentBuilder();      
    Document dom = db.newDocument();        
    Element root = dom.createElement("Companies");      
    dom.appendChild(root);      
    Element company = dom.createElement("Company");
    Text t = dom.createTextNode("Banana®");        
    company.appendChild(t);     
    root.appendChild(company);      
    DOMImplementationRegistry dir = DOMImplementationRegistry.newInstance(); 
    DOMImplementationLS impl = 
        (DOMImplementationLS)dir.getDOMImplementation("LS");        
    LSSerializer writer = impl.createLSSerializer();
    LSOutput output = impl.createLSOutput();
    output.setByteStream(System.out);
    writer.write(dom, output);

示例输出:

<?xml version="1.0" encoding="UTF-8"?>
<Companies><Company>Banana&amp;#174;</Company></Companies>

1 个答案:

答案 0 :(得分:0)

如果你能以某种方式在CDATA部分声明它,它应该按原样传递。