gpt4 book ai didi

java - 防止transformer.transform( source, result ) 转义特殊字符

转载 作者:行者123 更新时间:2023-12-04 14:22:23 29 4
gpt4 key购买 nike

我正在使用 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);

由于我更新的文档有像“>”这样的文本内容,transformer.transform 方法将其更改为 &g t;
有没有办法在不转义特殊字符的情况下获得输出。
由于某些项目限制,我无法使用其他解析器。
我不能使用 StringEscapeUtils.unescapeXml()。原因是 xml 可以有 &g t;。如果我使用这种实用方法,&g t;最初存在于 xml 中的内容也将被更改。
所以我想要一种不会逃避任何特殊字符的机制。

最佳答案

您创建的变压器

Transformer transformer = tFactory.newTransformer();
使用实现身份转换的默认样式表进行初始化。这意味着它将简单地将您的 DOM 序列化为格式良好的 XML 文档。必要时自动应用输出转义。
如果您想要更好地控制输出,并且可能生成不符合 XML 文档结构的内容,您可以使用将输出方法切换为文本的自定义样式表。通过这种方式,您可以控制更多的结构,但可能会在 XML 区域中犯更多错误。
更多信息请访问
  • https://docs.oracle.com/en/java/javase/11/docs/api/java.xml/javax/xml/transform/TransformerFactory.html#newTransformer()
  • https://www.w3.org/TR/xslt20/#element-output
  • 关于java - 防止transformer.transform( source, result ) 转义特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21808477/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com