选择唯一值会跳过其中一些吗?

时间:2015-10-28 12:33:05

标签: xml xslt

现在我正在尝试从XSL文件中选择XML文件中的数据,保持所有字段的唯一性(这样我就不会得到任何东西的倍数)。但是,虽然这有效,但某些标题名称认为它们是子标题名称,出于某种原因。

XML代码:

<Response>
<Guidelines>
    <Guideline>
        <GuidelineName> Header goes here </GuidelineName>
        <GuidelineSubname> First </GuidelineSubname>
    </Guideline>
    <Guideline>
        <GuidelineName> Header goes here </GuidelineName>
        <GuidelineSubname> Second </GuidelineSubname>
    </Guideline>
    <Guideline>
        <GuidelineName> Header goes here </GuidelineName>
        <GuidelineSubname> Third </GuidelineSubname>
    </Guideline>
</Guidelines>
</Response>

XSL代码:

<xsl:for-each select="Response/Guidelines/Guideline">
<h3> <xsl:value-of select="GuidelineName[not(.=preceding::*)]" /> </h3>

<ul>
   <li> <xsl:value-of select="GuidelineSubname" /> </li>
</ul>   

</xsl:for-each>

如果前面的命令不存在,它可以工作,但由于它没有过滤掉并制作唯一的标题,所以它变得非常混乱。

我想要发生什么:

标题到达

-First

标题到达

-Second

标题到达

-Third

会发生什么:

标题到达

- 第二个 - 首先

如您所见,其中一个标题不存在,导致副标题名称错误。

标题到达

-Third

1 个答案:

答案 0 :(得分:0)

<xsl:template match="Guideline">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="GuidelineName">
  <h3><xsl:apply-templates/></h3>
</xsl:template>

<xsl:template match="GuidelineSubname">
  <ul><li><xsl:apply-templates/></li></ul>
</xsl:template>