避免使用XSLT在XML中重复?

时间:2012-08-08 21:17:07

标签: xml xslt duplicates

这个问题是我上一个问题的后续问题。由于提供的答案,我能够匹配谱系的查询项和查询名称。但是,我现在正在获取重复的查询项目名称,因为在多个查询节点中使用了相同的项目。

为了解释一下XML,dataItem“Region”位于多个查询中,XSL正在经历并将root / lineage / item / name与query / query / selection / dataItem / expression相匹配。 XML。但是,由于“Region”位于多个查询中,因此会多次抓取它。我只想要一次。这是我正在使用的XML示例:

<root>
  <lineage>
    <item>
      <name>[Sales (query)].[Retailers].[Retailer Province-State]</name>
      <ns>[goretailers]</ns>
      <qs>[RETAILER_SITE]</qs>
      <qi>[Retailer Province-State]</qi>
    </item>
    <item>
      <name>[Sales (query)].[Products].[Product line]</name>
      <exp>#'[gosales].[PRODUCT_LINE].[PRODUCT_LINE_'+ $Language_lookup{$runLocale}+ '] '#</exp>
    </item>
  </lineage>

 <!--There is more XML code in between -->

<queries>
    <query name="RevenuMapquery">
    <!--More Code in between that is unimportant-->
    <selection>
        <dataItem name="Region">
            <expression>[AllRegion].[Region]</expression>
        </dataItem>
        <dataItem name="Revenue">
            <expression>[MeasureRevenue].[Revenue]</expression>
        </dataItem>
        <dataItem name="Planned revenue">
            <expression>[MeasureRevenue].[Planned revenue]</expression>
        </dataItem>
    </selection>
    </query>
    <query name="AllRegion">
    <source>
    <model />
    </source>
    <selection>
        <dataItem name="Region">
            <expression>[Sales (query)].[Retailers].[Retailer Province-State]</expression>
        </dataItem>
    </selection>
        <detailFilters>
        <detailFilter>
    <filterExpression>[Sales (query)].[Retailers].[Retailer country] = ('United States')    </filterExpression>
        </detailFilter>
        </detailFilters>
    </query>    
</root>
<xsl:key name="dataItems" match="dataItem" use="expression"/>

  <xsl:template match="root">
      <xsl:apply-templates select="lineage"/>
   </xsl:template>

<!-- The above is included at the top of the XSl stylesheet as a child of the stylesheet node -->

<xsl:for-each select="item">
   <Row>        
        <Cell Borders="#ffffff">
          <xsl:attribute name="Background">
            <xsl:choose>
              <xsl:when test="position() mod 2 = 1">#CCCCFF</xsl:when>
              <xsl:when test="position() mod 2 = 0">#FFFFFF</xsl:when>
            </xsl:choose>
          </xsl:attribute>
          <Paddings Left="5" Right="5" Top="2" Bottom="2"/>
          <xsl:for-each select="key('dataItems', name)">
              <Text Style="TableContent">
                  <xsl:value-of select="@name"/>
                      <xsl:apply-templates select="dataItems"/>
              </Text>
           </xsl:for-each>
        </Cell>    
   </Row>
</xsl:for-each>

我现在得到的结果与此类似: 区域, 区域, 区域, 生产线, 生产线, 收入, 收入

我想要的结果是: 区域, 生产线, 收入

0 个答案:

没有答案