Transformer从标签中删除了空间

时间:2013-09-23 11:58:31

标签: java xml xslt

我想将节点转换为字符串,因为我正在使用以下代码片段:

private static String nodeToString(Node node) {
    StringWriter sw = new StringWriter();
    try {
        Transformer t = TransformerFactory.newInstance().newTransformer();
        t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        t.setOutputProperty(OutputKeys.INDENT, "no");
        t.transform(new DOMSource(node), new StreamResult(sw));

    } catch (TransformerException te) {
        Log.e(TAG, "Node transformation exception " + te.getMessage());
    }
    return sw.toString();
}

我面临的问题是,它正在删除节点末尾的空间。

<Message Text="OK" /> to  <Message Text="OK"/>

谁能告诉我如何避免修剪空间? 任何帮助将不胜感激。

此致 Yuvi

2 个答案:

答案 0 :(得分:2)

  

有谁能告诉我如何避免修剪空间?

由于<Message Text="OK" /><Message Text="OK"/>完全相同,因此对正确的XML解析器没有任何区别。

如果出于某种原因 重要(例如,您将此输出提供给无法处理空间的非XML工具),那么您可以尝试Saxon变压器实现,支持XSLT 2.0。 XSLT 2.0提供了一个"xhtml" output method,您可以使用它来代替默认的“xml”,并按照XHTML的HTML兼容性指南进行序列化。除此之外,这意味着它使用空格(<br />)或“扩展”形式(<example></example>)写入所有空标记。

答案 1 :(得分:1)

DOM模型没有提供在XML标记内表达额外空格的方法。它只包含有关标记名称,属性及其值的信息。

从XML的角度来看,额外的空格并不重要 - 两个表示都是相同的。