这个问题是我上一个问题的后续问题。由于提供的答案,我能够匹配谱系的查询项和查询名称。但是,我现在正在获取重复的查询项目名称,因为在多个查询节点中使用了相同的项目。
为了解释一下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>
我现在得到的结果与此类似: 区域, 区域, 区域, 生产线, 生产线, 收入, 收入
我想要的结果是: 区域, 生产线, 收入