我已经有 5 年没有接触过 XSLT 了,而且我不记得有人会如何做到这一点。本质上,我有一个如下所示的 XML 结构:
<xml>
<MenuDataResult>
<Item name="firstlayeritem">
<Item></Item>
<Item></Item>
<Item name="secondlayeritem">
<Item name="thirdlayeritem">
<ItemSelected>true</ItemSelected>
</Item>
</Item>
<Item></Item>
<Item></Item>
</Item>
</MenuDataResult>
</xml>
此 XSLT 正在基于此结构构建 UL,但仅在 Items 的第二级(这是针对仅包含二级导航项的页面左侧的辅助导航栏)。这曾经是最多两层深,因此对第二层中的 ItemSelected 节点的简单检查将允许我们向该节点的“当前”或类似的 LI 元素添加一个类,以启用该元素的 CSS 突出显示导航。
现在他们想添加第三层,就像上面一样。这里的技巧是,第三层实际上并没有显示在无序列表中,只有第二层项目是,所以第二层项目需要是获得“当前”类的项目,即使“ItemSelected”节点在它的一个孩子身上。
我们曾经做过这个检查:
<xsl:variable name="SelectedMenu" select="ItemSelected/text()" />
<xsl:if test="contains('true', $SelectedMenu)">...</xsl:if>
然后检查是否等于 true 以添加类。但现在我需要它不仅查看当前项目,还查看所有子项目,以查看其中是否有任何“真实”。
有人可以帮我弄清楚需要做什么才能做到这一点吗?我不记得 XSLT 的任何细微差别或如何做这类事情......