2

我正在处理一组相互关联的文档,我正在使用单个 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 代理,我通过它发出请求并让代理清理响应。)

4

1 回答 1

0

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

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

因为转义的 XML 没有任何声明的名称空间或名称空间前缀,所以应该在没有名称空间的情况下处理元素。

于 2013-05-10T01:13:21.490 回答