我的xml如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="document-library-filter.xsl"?>
<xml total="14">
<document>
<file_type><![CDATA[application/pdf]]></file_type>
<file_size><![CDATA[4420 KB]]></file_size>
<document_group><![CDATA[LED Systems 1]]></document_group>
</document>
<document>
<file_type><![CDATA[application/pdf]]></file_type>
<file_size><![CDATA[4420 KB]]></file_size>
<document_group><![CDATA[LED Systems 1]]></document_group>
</xml>
它包含多个文档节点。并且每个文档节点都具有文件类型节点。所有文档节点的值都是pdf。我想写出单个文件类型的节点。并且丢弃其他节点,因为它们具有相同的值。为了做到这一点,我试着写出下面的xslt。但是它写出了所有的节点。
以下是xslt:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<hr class="grid-hr inner-grid"/>
<fieldset>
<legend>%%filter-file-types%%:</legend>
<ul class="itembrowser-filter">
<xsl:for-each select="xml/document">
<xsl:if test="file_type">
<xsl:variable name="file_type">
<xsl:value-of select="file_type"/>
</xsl:variable>
<xsl:variable name="file_type_Value">
<xsl:value-of select="substring-after($file_type,'/')"/>
</xsl:variable>
<li>
<label>
<input type="checkbox"
class="input-big-checkbox"
name="filetype-filter"
value="{$file_type}"/>
<span class="label">
<xsl:copy-of select="$file_type_Value"/>
</span>
</label>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</fieldset>
<hr class="grid-hr inner-grid"/>
</xsl:template>
</xsl:stylesheet>
我需要一些方法来比较两个节点的值,如果它们相同,那么它只会写一次。
我的预期输出是:
<fieldset>
<legend>%%filter-file-types%%:</legend>
<ul class="itembrowser-filter">
<li>
<label>
<input type="checkbox"
class="input-big-checkbox"
name="filetype-filter"
value="application/pdf"/>
<span class="label">
<xsl:copy-of select="pdf"/>
</span>
</label>
</li>
</ul>
</fieldset>
我无法做到这一点。请帮帮我。
样式表遍历所有document
元素,因此将为每个元素输出一个fieldset
。
此模板生成预期输出:
<xsl:template match="//file_type[not(.=preceding::file_type)]">
<fieldset>
<legend>%%filter-file-types%%:</legend>
<ul class="itembrowser-filter">
<li>
<label>
<input type="checkbox" class="input-big-checkbox" name="filetype-filter" value="{.}"/>
<span class="label">
<xsl:value-of select="substring-after(.,'/')"/>
</span>
</label>
</li>
</ul>
</fieldset>
</xsl:template>
模板匹配具有相同值的所有file_type
元素中的第一个file_type
元素。