【问题标题】:Keep CDATA for xstl transformation?为 xslt 转换保留 CDATA?
【发布时间】:2012-11-23 12:15:29
【问题描述】:

我正在对 XML 文档中的 saxon 进行 xstl 转换。 该文档不是标准有效的 XML,我想保留在其中找到的所有 <![CDATA[< 元素。

但是使用 .xsl 文件进行转换

Transformer trans = TransformerFactory.newInstance().newTransformer(new StreamSource(new File("foo.xsl"));
trans.transform(new StreamSource(new File("foo.xml"), new StreamResult(new File("output.xml")));

导致删除这些 CDATA 条目。我怎样才能防止这种情况发生?

【问题讨论】:

    标签: java xml saxon


    【解决方案1】:

    您不能,因为在 xslt 使用的数据模型中无法区分是否来自 cdata 部分的文本。但是,您可以在样式表中定义某些结果元素将被包装在 cdata 中。这是使用样式表中的cdata-section-elements attribute of the xsl:output element 完成的。

    【讨论】:

    • 这很完美!只是另一个问题:如何排除特定元素?假设我有一个<my:request><my:request name="test">,如何排除带有属性名称的请求?
    • @membersound:你的意思是,my:request 应该包含在 cdata 中,除非它的 name 属性的值为“test”?我认为这是不可能的,因为cdata-section-elements 只列出了元素的 qnames。
    • 是的,<my:request/> 中的所有内容都应该被包装。 name="test" 的所有内容都不应使用 cdata 包装。
    【解决方案2】:

    考虑使用 Andrew Welch 的 LexEv 工具(我相信与 KernowForSaxon 捆绑在一起),它将 CDATA 开始和结束标记预处理为不同的东西(可能是处理指令?),这些东西在 XSLT 数据模型中可见,因此可供应用程序使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-02
      • 2013-03-19
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多