防止transform.transform(源,结果)转义特殊字符

时间:2014-02-16 07:25:05

标签: java xml

我正在使用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中的内容也会发生变化。 所以我想要一种不会逃避任何特殊角色的机制。

1 个答案:

答案 0 :(得分:0)

你创建的变压器

Transformer transformer = tFactory.newTransformer();

使用实现身份转换的默认样式表进行初始化。这意味着它将简单地将您的 DOM 序列化为格式良好的 XML 文档。必要时会自动应用输出转义。

如果您想更好地控制输出,并且可能生成不符合 XML 文档结构的内容,您可以使用自定义样式表将输出方法切换为文本。通过这种方式,您可以控制更多的结构,但可能会在 XML 区域中犯更多错误。

更多信息在

相关问题