Я пытаюсь создать xml файлы с данными из API, которые мы вернули в формате json. Он работает, но иногда xml файлы при открытии терпят неудачу из-за плохого xml. Я проследил это до некоторого символа, появляющегося в паре полей, и подумал, что использование тегов CData поможет:
String c_title = jRootNode.path("snippet").path("title").asText();
String c_description = jRootNode.path("snippet").path("description").asText();
if(c_title.contains("'") || c_description.contains("'") || c_title.contains("'") || c_description.contains("'") || c_title.contains("�") || c_description.contains("�")){
c_title = c_title.replace("'", "'");
c_description = c_description.replace("'", "'");
c_title = c_title.replace("'", "'");
c_description = c_description.replace("'", "'");
c_title = c_title.replace("�", " ");
c_description = c_description.replace("�", " ");
}
e = doc.createElement("title");
e.appendChild(doc.createCDATASection(c_title));
video.appendChild(e);
e = doc.createElement("description");
e.appendChild(doc.createCDATASection(c_description));
video.appendChild(e);
}
Но все еще есть символы, которые выходят из строя xml:
<title><![CDATA[Ju eu amei as doas casas e a casa da Cris não e
cachorro e urso e eu amei linda maravilhosa sempre me
]]>��������<![CDATA[ animado educada a Cris
linda
maravilhosa
Texcinho legal bom de rima doido
A ju maravilhosa educada sempre me ]]>��������<
Есть ли способ проверить xml без шаблона или избавиться от всех этих видов кодирования?
РЕДАКТИРОВАТЬ:
Я не могу поделиться файлом xml Сам по себе, поскольку это проблема конфиденциальности, а не полный код. Файл xml анализируется клиентским процессом, и в нем происходит сбой; при отладке мы проверяем xml в онлайн-инструменте xml, чтобы проверить, действительно ли xml был плохим. xml создается в java (пружина) с использованием:
DocumentBuilderFactory docFactory =
DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
// root elements
Document doc = docBuilder.newDocument();
....
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
String output = writer.getBuffer().toString();
Так что, если кто-то может помочь с любой из проблем: 1. проверьте текст, чтобы убедиться, что кодовые символы не включены в текст 2. проверить окончательный xml