gpt4 book ai didi

xslt - 在 xsl :for-each to retrieve nodes which are out of for-each's scope 中使用 current() 的问题

转载 作者:行者123 更新时间:2023-12-03 15:52:24 25 4
gpt4 key购买 nike

您好,我是 XSLT2.0 的初学者,但由于在最近的项目中需要 XML 配置,我会试一试。XML 结构如下所示:

<bookstore>
<books>
<book author="a" title="a1"/>
<book author="b" title="b1"/>
<book author="c" title="c1"/>
<book author="d" title="d1"/>
</books>
<topAuthorList>
<thisMonth>c,a,d,b</thisMonth>
</topAuthorList>

XSLT 看起来像这样:

    <xsl:template match="/bookstore">
<result>
<xsl:variable name="varList">
<xsl:value-of select="topAuthorList/thisMonth"></xsl:value-of>
</xsl:variable>

<test>
<xsl:value-of select="books/book[@author='a']/@title"></xsl:value-of>
</test>

<books>
<xsl:for-each select="tokenize($varList, ',')">
<xsl:value-of select="books/book[@author=current()]/@title"></xsl:value-of>
</xsl:for-each>
</books>
</result>
</xsl:template>

但在 XMLSpy(ver 2011 rev3)中它给我错误信息:

XSLT 2.0 Debugging Error: Error in XPath 2.0 expression (Type error XPTY0004: Expected a node - current item is 'c' of type xs:string)

我已经多次搜索谷歌和这个网站,但找不到答案。我什至尝试过使用调用模板,即将 current() 作为参数传递并让第二个模板处理节点选择,但仍然出现相同的错误。

最佳答案

这个有效:

  <xsl:template match="/bookstore">
<result>
<xsl:variable name="varList">
<xsl:value-of select="topAuthorList/thisMonth"></xsl:value-of>
</xsl:variable>

<test>
<xsl:value-of select="books/book[@author='a']/@title"></xsl:value-of>
</test>

<books>
<xsl:variable name="books" select="/bookstore/books"/>
<xsl:for-each select="tokenize($varList, ',')">
<xsl:value-of select="$books/book[@author=current()]/@title"></xsl:value-of>
</xsl:for-each>
</books>
</result>
</xsl:template>

我所做的只是将 /bookstore/books 放在一个变量中,然后从该变量中进行查找。我对为什么需要这样做有一个直观的理解,但是没有一些研究就没有确切的正式原因。也许这里的其他 XML 专家之一可以插话。

编辑:我在 Michael Kay 出色的“XSLT 2.0 和 XPath 2.0”巨著第 625 页中找到了相关信息:

A rooted path represents a path starting at the root node of the tree that contains the context node

由于您的上下文节点是裸字符串,因此它不包含您要查找的节点。使用变量为 XPath 表达式提供了正确的上下文。

关于xslt - 在 xsl :for-each to retrieve nodes which are out of for-each's scope 中使用 current() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6495477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com