相关疑难解决方法(0)

xslt匹配过滤结果集的前x项

对于xslt来说还是新手,请原谅我这是一个基本问题 - 我无法在SO上找到答案,也无法在Google上搜索.

我要做的是返回一组经过筛选的节点,然后在该集合中的前1个或2个项目上进行模板匹配,另一个模板与剩余部分匹配.但是,如果没有<xsl:for-each />循环,我似乎无法做到这一点(这是非常不受欢迎的,因为我可能匹配3000个节点并且仅以不同方式处理1).

使用position()不起作用,因为它不受过滤影响.我已经尝试对结果集进行排序,但这似乎没有及早生效以影响模板匹配.在<xsl:number />输出正确的数字,但我不能在比赛语句中使用这些.

我在下面放了一些示例代码.我正在使用position()下面不合适的方法来说明问题.

提前致谢!

XML:

<?xml version="1.0" encoding="utf-8"?>
<news>
    <newsItem id="1">
        <title>Title 1</title>
    </newsItem>
    <newsItem id="2">
        <title>Title 2</title>
    </newsItem>
    <newsItem id="3">
        <title></title>
    </newsItem>
    <newsItem id="4">
        <title></title>
    </newsItem>
    <newsItem id="5">
        <title>Title 5</title>
    </newsItem>
</news>
Run Code Online (Sandbox Code Playgroud)

XSL:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <ol>
            <xsl:apply-templates select="/news/newsItem [string(title)]" />
        </ol>
    </xsl:template>

    <xsl:template match="newsItem [position() &lt; 4]">
        <li>
            <xsl:value-of select="title"/>
        </li>
    </xsl:template>

    <xsl:template match="*" /> …
Run Code Online (Sandbox Code Playgroud)

xml xslt umbraco

3
推荐指数
1
解决办法
3573
查看次数

请帮助我理解这个XPath

我在我的一个学习代码中遇到了这个XPath:

  count($recprv//*[local-name()='provider_email' or local-name()='provider_fax' 
  or local-name()='provider_phone' or local-name()='provider_phone_ext' ])
Run Code Online (Sandbox Code Playgroud)

我现在很难弄清楚它的含义,我个人认为它说:"在xml文件recprv中,计算包含provider_email或包含provider_fax或包含provider_phone或包含provider_phone_ext的任何元素的数量.

那么它基本上会通过xml文件recprc并计算所有记录?只是有点困惑.此外,我很想知道计数函数中究竟计算了什么.非常感谢帮助我在这里!

xml xpath

1
推荐指数
1
解决办法
138
查看次数

标签 统计

xml ×2

umbraco ×1

xpath ×1

xslt ×1