XSLT 2.0 Xpath错误"不是节点项"

Mae*_*o13 3 xslt key xslt-2.0

我在这里的第一篇文章 - 肯定希望有人知道答案!我已经能够为我遇到的许多问题找到解决方案,但对于这个问题却没有.关于同一主题的本网站上的问题和答案并没有解决我的问题......

我有一个包含格式规范的xml

<Format>
    <TagNr>92</TagNr>
    <Option>A</Option>
    <Format>//[N]15d</Format>
</Format>
<Format>
    <TagNr>92</TagNr>
    <Option>B</Option>
    <Format>//3!a/3!a/15d</Format>
</Format>
Run Code Online (Sandbox Code Playgroud)

TagNr +选项是此节点集中的唯一组合.

我定义了一个键,使得使用这组格式变得更容易:

<xsl:key name="xx" match="//Format/Format" use="concat(../TagNr, ../Option)"/>
Run Code Online (Sandbox Code Playgroud)

我确实可以使用这个键并获得正确的值,但仅限于非特殊元素; 我在以下每个或其他结构中使用此键时出现错误"XPath 2.0表达式中的错误不是节点项".

我尝试实现的目标如下:在处理的其他节点中,有一系列选项,我希望为每个字符检索格式.例如:

<Tag>
    <TagNr>92</TagNr>
    <Options>AB</Options>
</Tag>
Run Code Online (Sandbox Code Playgroud)

我一直在尝试下面的很多变种,但没有运气:

<xsl:variable name="TN"><xsl:value-of select="TagNr"/></xsl:variable>
<xsl:variable name="optList">
    <xsl:analyze-string select="./Options" regex="[A-Z]">
        <xsl:matching-substring>
            <xsl:variable name="TNO" select="concat($TN, .)"/>
            <opt>
                <tag><xsl:value-of select="$TNO"/></tag>
                <fmt><xsl:value-of select="key('xx', $TNO)"/></fmt>
            </opt>
        </xsl:matching-substring>
    </xsl:analyze-string>
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)

使用正则表达式分割成单个字符很顺利,并且(仅)检索(仅)opt/tag的值也很好.但是当我添加opt/fmt时,我遇到了上面提到的Xpath表达式的错误消息select ="key('xx',$ TNO)".

我尝试根据此站点上另一个线程中建议的键函数定义变量,但没有成功.

谁能帮我?

Mic*_*Kay 5

key()函数(带有两个参数)搜索包含上下文节点的文档.如果上下文项不是节点 - 例如,在analyze-string中 - 那么您将收到此错误,因为它不知道要搜索哪个文档.答案是使用key()的第三个参数来提供此信息.