首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSL:模板匹配的位置()与select中的位置()

XSL:模板匹配的位置()与select中的位置()
EN

Stack Overflow用户
提问于 2017-04-10 17:13:49
回答 1查看 4.3K关注 0票数 2

我不明白以下的行为:

输入XML

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<list>
    <article>Title1</article>
    <other>Other</other>
    <article>Title2</article> 
    <article>Title3</article>
</list>

XSL 1:

代码语言:javascript
复制
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

    <xsl:strip-space elements="*"/>

    <xsl:template match="list">
        <xsl:apply-templates select="article" />
    </xsl:template>

    <xsl:template match="list/*">
        Content: <xsl:value-of select="."/> | Position: <xsl:value-of select="position()"/> | Last: <xsl:value-of select="last()"/>
    </xsl:template>

    <xsl:template match="text()" />

</xsl:stylesheet>

输出XSL1

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
Content: Title1 | Position: 1 | Last: 3
Content: Title2 | Position: 2 | Last: 3
Content: Title3 | Position: 3 | Last: 3

到目前一切尚好。

现在,如果将上面的匹配从list/*更改为list/*[2],则不会得到任何输出。我认为这是因为第二个项目是<other>,它与select="article"不匹配。

奇怪的是,当我把比赛改为list/*[3]时,我得到了位置为2的线:

代码语言:javascript
复制
<xsl:template match="list/*[3]">
    Content: <xsl:value-of select="."/> | Position: <xsl:value-of select="position()"/> | Last: <xsl:value-of select="last()"/>
</xsl:template>

<?xml version="1.0" encoding="UTF-8"?>
Content: Title2 | Position: 2 | Last: 3   

为什么position()在模板中的工作方式不同于match子句?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-10 21:13:54

这个XPath表达式

代码语言:javascript
复制
list/*[3]

表示<list>元素的第三个子元素。节点测试[3]相对于前面路径表达式选择的节点进行评估。

另一方面,XSLT第4节指定

最外层的表达式(即不属于另一个表达式的表达式)的上下文如下: ..。

  • 上下文位置来自当前节点列表中当前节点的位置;第一个位置为1。

在模板正文中,position()last()显示为最外层的表达式。因此,它们相对于当前节点列表进行评估,并且该模板仅在当前节点列表由以下三个节点组成时应用。

代码语言:javascript
复制
<xsl:apply-templates select="article" />

<list>是当前节点时。该节点列表恰好包含三个节点,无论模板匹配了多少节点或匹配哪个节点。此外,给定节点在该节点列表中的位置不一定与该节点在由模板匹配表达式的子表达式list/*匹配的节点列表中的位置相同,也不一定与其在由模板的完全匹配表达式匹配的节点列表中的位置相同。职位措施之间只有一种偶然的关系。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43329186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档