Создание 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&#174;</Company></Companies>
1 ответ
Если бы вы могли как-то объявить это в разделе CDATA, его нужно пропустить как есть.