将转义的xml转换为当前文档的节点

时间:2013-05-09 15:52:59

标签: xslt

我正在使用一组相互关联的文档,我正在使用单个XSL和处理(根据内容和到目前为止完成的处理确定使用的URL)。

例如,使用以下命令从我的XSL获取文档:

<xsl:for-each select=
"(document('<someURL>')//atom:entry/atom:content/m:properties/d:PresentationContent) 
[position()=1]">
  <xsl:call-template name="formHandler"/>
</xsl:for-each>

大多数文档都可以。

除了在一种情况下,元素d:PresentationContent的内容然后直接包含转义的XML作为文本(即,不使用cdata),例如

&lt;Component&gt;&lt;Id&gt;tcm:10-7788&lt;/Id&gt;&lt;/Component&gt;

在XSL中是否有任何方法可以获取文档,将编码的字符串转换为XML并处理节点,就好像它们是文档的一部分一样,以便可以将示例视为:

//atom:entry/atom:content/m:properties/d:PresentationContent/atom:Component/atom:Id 

我已经在解决方案方面做了很长的一段时间,这对我来说在这个阶段进行更改非常昂贵 - 所以任何帮助都非常感激。 (备份计划是构建一个我发出请求的http代理,让代理清理响应。)

1 个答案:

答案 0 :(得分:0)

使用 XSLT 3.0 ,您可以使用parse-xml()功能:

<xsl:template name="formHandler">
    <xsl:apply-templates select="parse-xml(text())/Component/Id" />
</xsl:template>

由于转义的XML没有任何delclared命名空间或namespace-prefix,因此应该在没有命名空间的情况下解决这些元素。