java - 变压器脱离 CR

标签 java xml xslt

建议以下计划:

    import java.io.StringReader;

    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.stream.StreamResult;
    import javax.xml.transform.stream.StreamSource;

    public class CrDemo {
        public static void main(String[] args) throws Exception {
            final String xml = "<a>foo&#13;\nbar&#13;\n</a>";
            final TransformerFactory tf = TransformerFactory.newInstance();
            final Transformer t = tf.newTransformer();
            t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
            t.setOutputProperty(OutputKeys.INDENT, "no");
            t.setOutputProperty(OutputKeys.STANDALONE, "yes");
            t.transform(new StreamSource(new StringReader(xml)), new StreamResult(System.out));
        }
    }

输出如下所示:

    <a>foo&#13;
    bar&#13;
    </a>

是否可以防止 Transformer 逃逸 CR?

最佳答案

如果输入 XML 包含文字 CR 字符,它们将在解析过程中被删除。 XML 解析器将行结尾标准化为单个 NL 字符;但如果 CR 转义为 ,则这不适用。

因此,如果文本节点包含 CR 字符,XSLT 处理器会假设您已努力将其放在那里并且您确实需要它,因此它会以这样的方式输出它,即它可以在往返中存活下来生成的序列化输出由 XML 解析器重新处理。

当然,您可以删除 XSLT 代码中的 CR 字符,就像您可以删除任何其他字符一样。但这不会自动发生。

关于java - 变压器脱离 CR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58431758/

相关文章:

java - 为 Google GSON 添加自定义 TypeAdapterFactory 以检测注释的使用以动态返回自定义 TypeAdapter

java - 取消部署应用程序时触发功能

ios - 如何在标签栏中设置角标(Badge)值?

html - 博主 (BlogSpot) : not open link and not change design

xml - XSLT 默认变量值(如果值不存在)

java - 如何在 IntelliJ 中制作包含多个类的 .jar 文件?

xml - XSL转换麻烦

variables - 如何使用参数或变量值作为节点名称?

java - Saxon9 命名空间 LRUCache 中的 NullPointerException

Java lambda 和 HashMap<Boolean, Object>