Создание DOM с Xerces и Java - как предотвратить выход амперсанда - PullRequest
1 голос
/ 12 февраля 2012

Я использую xerces в Java для построения DOM.Для одного из полей, которое становится текстовым узлом в DOM, данные доставляются из источника, который уже превратил любые специальные символы, отличные от ASCII и / или XML, в имена или номера своих сущностей, например «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 Ответ

0 голосов
/ 06 августа 2012

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

...