我正在使用DOM解析器更新xml的节点和文本内容。为了保存那个DOM解析器我正在使用transformer.transform方法。 以下是示例代码。
String xmlText = "<uc>abcd><name>mine</name>efgh\netg<tag>sd</tag></uc>";
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
InputSource inStream = new InputSource();
inStream.setCharacterStream(new StringReader(xmlText));
Document document = documentBuilder.parse(inStream);
Node node = document.getDocumentElement();
node.normalize();
NodeList childNodes = node.getChildNodes();
for(int i=0; i<childNodes.getLength(); i++) {
if(childNodes.item(i).getNodeType() == Node.TEXT_NODE) {
System.out.println(childNodes.item(i).getTextContent());
childNodes.item(i).setTextContent("123>");
}
}
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "US-ASCII");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource( document );
OutputStream xml = new ByteArrayOutputStream();
StreamResult result = new StreamResult( xml );
transformer.transform( source, result );
String formattedXml = xml.toString();
System.out.println(formattedXml);
由于我的更新文档的文本内容类似于“&gt;”,因此transformer.transform方法正在将其更改为&amp; g t; 有没有办法获得输出而不转义特殊字符。 由于某些项目限制,我无法使用其他解析器。 我不能使用StringEscapeUtils.unescapeXml()。原因是xml可以有&amp; g t;。如果我使用这种实用方法,&amp; g t;最初存在于xml中的内容也会发生变化。 所以我想要一种不会逃避任何特殊角色的机制。
答案 0 :(得分:0)
你创建的变压器
Transformer transformer = tFactory.newTransformer();
使用实现身份转换的默认样式表进行初始化。这意味着它将简单地将您的 DOM 序列化为格式良好的 XML 文档。必要时会自动应用输出转义。
如果您想更好地控制输出,并且可能生成不符合 XML 文档结构的内容,您可以使用自定义样式表将输出方法切换为文本。通过这种方式,您可以控制更多的结构,但可能会在 XML 区域中犯更多错误。
更多信息在