Создание DOM с Xerces и Java - как предотвратить выход амперсанда

Я использую Xerces в Java для создания DOM. Для одного из полей, которое становится текстовым узлом в DOM, данные доставляются из источника, который уже превратил любые специальные символы, отличные от ASCII и / или XML, в имена или номера своих сущностей, например "Banana®"

Я знаю, что дизайн системы неправильный с точки зрения источника данных, который не должен делать это, но это вне моего контроля, но меня интересует, есть ли способ как-то предотвратить это от того, чтобы избежать и превратиться в "Banana& амп; #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 ответ

Если бы вы могли как-то объявить это в разделе CDATA, его нужно пропустить как есть.

Другие вопросы по тегам