【发布时间】:2017-09-25 13:17:12
【问题描述】:
我正在处理一个开始变得非常无聊的问题。确实,这是我阻止的情况: 这是我的 XML 示例:
<Classification>
<data>
<value>String1</value>
<value>String2</value>
<value>content1</value>
</data>
<data>
<value></value>
<value></value>
<value>
<part>content3</part>
<part>content2</part>
<part>content1</part>
</value>
</data>
<data>
<value></value>
<value></value>
<value>content1</value>
</data>
<data>
<value></value>
<value></value>
<value>
<part>content2</part>
<part>content4</part>
</value>
</data>
</Classification>
这是我想要的结果:
<Classification>
<data>
<value>content1</value>
</data>
<data>
<value>content2</value>
</data>
<data>
<value>content3</value>
</data>
<data>
<value>content4</value>
</data>
<data>
<value>String1</value>
</data>
<data>
<value>String2</value>
</data>
</Classification>
我想将我的 xml 分解为仅输出唯一值。但是,我无法解决 value [3] 可能不同的问题。
我已经使用了previous-sibling 和recursion。这是我使用的 xsl:
<xsl:template name="clearClassificationWithPart">
<xsl:param name="recursion"/>
<xsl:choose>
<xsl:when test="$recursion > 0">
<xsl:for-each select="data[
not(./value[$recursion] = preceding-sibling::data/value[$recursion])
and not(./value[$recursion]/part = preceding-sibling::data/value[$recursion])
and not(./value[$recursion] = preceding-sibling::data/value[$recursion]/part)
and not(./value[$recursion]/part = preceding-sibling::data/value[$recursion]/part)]">
<xsl:choose>
<xsl:when test="./value[$recursion]/part">
<xsl:for-each select="./value[$recursion]/part">
<data>
<value><xsl:value-of select="." /></value>
</data>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<data>
<value><xsl:value-of select="./value[$recursion]" /></value>
</data>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:call-template name="clearClassificationWithPart">
<xsl:with-param name="recursion" select="$recursion - 1"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
我使用 XSLT 1.0。
有人有想法吗? 感谢您的帮助!
【问题讨论】:
-
您使用的是哪种 XSLT 1.0 处理器?
-
对于 PHP,我使用 libxslt,对于 Java,我使用 Xalan。
-
两者都支持 EXSLT
set:distinct()扩展功能 - 为什么不用呢? -
感谢您的评论!我是初学者,我的 xsl 文件非常基本,所以我不需要使用外部库。我尝试使用它但不起作用:/。这个函数就像前兄弟?