将值从document-uri()转换为XSLT中的字符串

时间:2014-08-17 12:03:20

标签: string xslt uri transformation

我目前正在尝试使用XSLT转换更大的XML文档堆栈,并使用shell脚本来执行此操作。但是,我收到以下错误:

  

唯一可以传递类型检查的值是空序列。   contains()的第一个参数的必需项类型是xs:string;   提供的值具有项目类型xs:anyURI

当我跟踪xsl中的相应行时,结果发现这可能是由于在另一个脚本中定义的变量。它的定义如下:

<xsl:variable name="crturi" select="document-uri(/)"/>

我的错误消息是否意味着我需要将$ crturi的值转换为thr字符串格式才能处理它?<​​/ p>

2 个答案:

答案 0 :(得分:2)

您应该只需使用string($crturi)作为contains函数的参数。

答案 1 :(得分:1)

xs:anyURI类型可以通过名为type promotion的概念自动转换为xs:string。您获得的错误似乎是您正在使用的产品中的错误。从XPath规范中引用:

  

xs:anyURI(或通过xs:anyURI限制派生的任何类型)的值可以提升为xs:string类型。

Martin Honnen的解决方案将在您的情况下解决它,但您应该考虑针对处理器提出错误。或者,您可以使用$crturi treat as xs:string,但这也只是一种解决方法。

我使用ExseltSaxon尝试了以下示例,但没有出现错误(正如预期的那样)。

<xsl:template match="/">
    <xsl:value-of select="contains(document-uri(/), 'any')" />
</xsl:template>