在XSLT中将XML转换为字符串(CDATA)

时间:2013-12-16 11:39:33

标签: xml xslt

我最近一直在使用Altova Map Force来构建XSL转换,我遇到了一个问题。为了创建一个有效的XML输出文件(来自输入文本文件,它足够简单,可以构建),它需要包含一些xmlns属性标记。

不幸的是,我无法找到一种方法来有效地执行此操作(修改输出xsd架构def和属性强制)Map Force或我的数据转换工具(由我为此构建的客户端构建,基于Saxon)。因此,我的解决方案是将生成的XML解析为另一个(最终)转换器,其中文件的XML元素被转换为单个文本块,其中包含XML的字符串表示形式(即返回的文件字符串),然后修剪关闭父元素声明,并使用修改后的元素(使用xmlns属性)修改它,然后输出要保存的内容。

我已经做了一些测试,我可以有效地做到这一点,但是在那个测试中,我正在解析一个预先转换的xml字符串,该字符串已经应用了该函数。所以,任何人都可以告诉我如何在xslt中,我可以将一组元素转换为一个我可以修改并返回为CDATA的字符串(变换器程序将转换为一个字符串并将其直接转储到输出文件中) )?

2 个答案:

答案 0 :(得分:1)

最新版本的Altova产品系列支持XPath 3.0功能,例如http://www.w3.org/TR/xpath-functions-30/#func-serialize,所以假设您只需要所有功能。

<xsl:output cdata-section-elements="foo"/>

<xsl:template match="bar">
  <foo><xsl:value-of select="serialize(.)"/></foo>
</xsl:template>

Saxon的商业版本也支持我认为的功能(如果你使用version="3.0"作为样式表)。

但是,您可能希望在单独的问题中发布真实的问题描述(您有输入,输出),以便我们可以确定您是否确实需要使用目前已概述的方法来确保您具有某些命名空间声明。

答案 1 :(得分:0)

成功,我必须修改XSD架构并将targetNamespace设置为与架构中的xmlns相同,并与elementFormDefault="qualified"一起,并将输出xml修改为适当的回应