【问题标题】:Ignore invalid xml when creating document with xsl transform使用 xsl 转换创建文档时忽略无效的 xml
【发布时间】:2011-04-04 14:00:16
【问题描述】:

有一个 java 工具,它使用多个 xsl 转换将数据从 crx 转换为 esi xml 标记。

esi 标记通常是无效的 xml,因为 esi 通常是小的逻辑 sn-ps,并不总是具有相同的开始和结束标记。 例如:

<esi:assign>

bunch of esi logic

<esi:vars>$(myVar)</esi:vars>

如果xml无效,java xsl引擎目前不允许生成xml。因此,我们必须将所有 esi 输出包装在虚拟标签中,但这会导致一些问题。

所以我想知道是否有办法让 java xsl 转换引擎生成无效或格式不正确的标记?

谢谢。

【问题讨论】:

  • 您将在其上使用更多 XSL 转换的任何中间输出都必须是有效的 XML(因为 XSL 仅适用于 XML),但我很确定最终输出可以是任何东西。您使用的是哪个“Java XSL 引擎”?
  • 请注意,这不是格式良好的 XML,而是有效的 SGML,那么您可以使用 DSSSL

标签: java xml xslt crx


【解决方案1】:

将输出模式设置为text(而不是默认的xml)。现在,您可以生成任何类型的文本(即使它看起来很像 XML),但您必须自己确保 &lt;&gt; 等字符在正确的位置正确转义。

此外,xsl:element 之类的内容也因显而易见的原因不再起作用。

也许你最好用真正的编程/脚本语言来写这样的东西,而不是用 XSL。

【讨论】:

  • @Aaron Digulla:“真正的编程/脚本语言比 XSL 中的语言”是什么意思?
  • XSL 是一种非常专业的类似脚本的语言,它有很多限制和地方,你想把你的东西放在桌子上以减轻痛苦:-) 这就是为什么你通常会过得更好使用 Python 等通用脚本语言。
  • @Aaron Digulla:我想你想说 XSLT 是一种具有专门执行上下文的高级声明性语言。
  • @Alejandro:我想说的是,对于 95% 的开发人员来说,XSLT 太复杂了,除了简单的“过滤器元素”问题之外,其他任何事情都太有限了。
  • @Aaron Digulla:您有权对此事发表任何意见。但我觉得你形容词太多了。
【解决方案2】:

如果您可以更改 xsl 转换,则可以使用:

<xsl:output method="text">

【讨论】:

  • 感谢 Stephan 的回答,但我想知道是否有办法在生成文档时关闭 xml 验证,而无需将方法更改为文本。
  • @Arya 根本不!如果输出方法是 XML ,则生成代码必须是有效的 XML :封闭标签、带引号的属性等。抱歉:\
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 2012-08-12
相关资源
最近更新 更多