通过对节点XSLT进行分组来获取属性值

时间:2013-07-10 21:39:13

标签: xml xslt xpath nodes

我有一个包含多个节点slide的大型xml文件,下面是我的大型xml的一部分。

<slide add_info="e" name="slide31.xml" nav_lvl_1="Contact" nav_lvl_2="Company" >
    --------something----------
</slide>
<slide add_info="a" name="slide32.xml" nav_lvl_1="References" nav_lvl_2="Company">
    -----something----
</slide>
<slide add_info="b" name="slide33.xml" nav_lvl_1="References" nav_lvl_2="Company" >
    ------something--------
</slide>
<slide add_info="c" name="slide34.xml" nav_lvl_1="References" nav_lvl_2="Company" >
    --------something----------
</slide>
<slide add_info="d" name="slide34.xml" nav_lvl_1="Contact" nav_lvl_2="Company" >
    --------something----------
</slide>

在这里,我只需要对属性为slideReferences的{​​{1}}节点进行分组,并获取这些节点的所有Company属性add_info。例如 预期产出:

values

目前我在做:

a b c

但是这给了我<xsl:choose> <xsl:when test="@nav_lvl_1='References'"> <xsl:if test="@nav_lvl_2='Company'"> <xsl:for-each select="//@add_info"> <xsl:value-of select="."/> </xsl:for-each> </xsl:if> </xsl:when> </xsl:choose> 整个文档中all属性的文本值。例如: 它给了我:

add_info

但我只需将输出作为e a b c d 我怎么能改变上面的a b c代码来达到这个目的..任何建议......我被困在这里:(

1 个答案:

答案 0 :(得分:1)

您说“分组”,但分组特别想要创建具有相同属性的多个组。

要仅选择一组具有特定属性的构造,只需在单个XPath地址中解决它们:

<xsl:for-each select="//slide[@nav_lvl_1='References' and @nav_lvl_2='Company'">
   <xsl:value-of select="@add_info"/>
</xsl:for-each>

...虽然我会放弃//slide并使用不带//的地址来获取所有幻灯片的父级,然后将这些幻灯片作为子项进行处理。