【发布时间】:2015-11-09 13:35:17
【问题描述】:
我的 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 否则 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() 否则doSomethingElse()
我应该如何实现这个? MyCondition 应该是什么?
PS:我的 XSL 版本是 1.0
【问题讨论】:
-
你有能力使用XSLT2吗?在这种情况下,它会产生大的不同。
-
那是开放的“相同”还是封闭的“相同”?开放意味着:没有说明
<baz>可能包含的内容,但无论如何它们都必须包含相同的内容。关闭意味着:<baz>恰好有 N 个我关心的属性,并且它们在所有属性中都必须相同。前者难度很大,后者难度适中,取决于数N。 -
@Flynn1179,是的,我想我可以使用 2.0。我使用了 W3Schools 的一些代码,他们使用的是 1.0。但我尝试将
-
@Tomalak 所有
baz元素将具有相同的标签,但可能具有不同的值。 -
我想说,不要假设。如有疑问,您可以使用
<xsl:value-of select="system-property('xsl:version')" />获取您可用的 XSL 版本。