XSLT:如何查找节点的唯一子节点的数量?

2023-12-24

我的 XML 看起来像这样:

<foo>
    <bar name="a">
        <baz name="xyz">
            <time>2</time>
            <date>3</date>
        </baz>
    </bar>
    <bar name="b">
        <baz name="xyz">
            <time>2</time>
            <date>3</date>
        </baz>
    </bar>
    <bar name="c">
        <baz name="xyz">
            <time>2</time>
            <date>3</date>
        </baz>
    </bar>
</foo>

我正在编写一个需要像这样运行的 XSL:如果所有baz那么孩子们都一样doSomething else doSomethingElse。我当前的节点是foo.

我是 XSLT 新手,并且了解 XSL 中的条件。现在看起来是这样的:

<xsl:template match="foo">   
<xsl:choose>
    <xsl:when test="[My condition]"> 
        doSomething()
    </xsl:when>
    <xsl:otherwise>
        doSomethingElse()
    </xsl:otherwise>
</xsl:choose>
</xsl:template>

在当前示例中,应该doSomething()正如所有的baz元素是相同的。

如果我找出唯一的数量baz元素,我可以测试它是否等于一。如果是的话我会doSomething() else doSomethingElse()

我应该如何实施这个?什么应该MyCondition be?

PS:我的XSL版本是1.0


如果所有的baz那么孩子们都一样doSomething else doSomethingElse。我当前的节点是foo.

这很令人困惑,因为:

  • baz不是以下的孩子foo;
  • 你的标题说“查找唯一子项的数量“ - 但事实并非如此 有必要找到它才能知道它们是否相同。

尝试类似的方法:

<xsl:template match="foo">
    <xsl:variable name="first-baz" select="(bar/baz)[1]" />
    <xsl:choose>
        <xsl:when test="bar/baz[date!=$first-baz/date or time!=$first-baz/time]">
            <!-- THEY ARE NOT ALL SAME -->
        </xsl:when>
        <xsl:otherwise>
            <!-- THEY ARE ALL SAME -->
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

请注意,这假设每个baz has a date and a time。否则你需要测试not(date=$first-baz/date) etc.

也可以看看:http://www.jeniitennison.com/xslt/grouping/muenchian.html http://www.jenitennison.com/xslt/grouping/muenchian.html


Added:

现在,假设所有bar/baz元素具有相同的标签(不是 一定date and time但是说a, b and c), 会是什么 这种情况下的测试属性?

这使得它变得更加复杂。你仍然可以构建一个密钥:

<xsl:key name="first-baz" match="foo/bar[1]/baz[1]/*" use="name()" />

然后进行测试:

<xsl:when test="bar/baz/*[. != key('first-baz', name())]">

如果有任何孩子,则返回 truebaz存在其字符串值与作为第一个子节点的同名节点不同的节点baz.

请注意,此处定义的密钥是文档范围内的。如果您想将测试限制为当前foo祖先,那么您必须在密钥中包含其 id。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSLT:如何查找节点的唯一子节点的数量? 的相关文章

随机推荐