我想用xsl遍历所有"项目" in" Cars"。
如果"项目" in" Cars"有一个元素"值" 我想显示该列表的所有值" CARS"这是定义的 在"列表"再次作为" item" listID =" CARS"。
所以这里它将是0和1.
这可以用xslt完成吗?
<Module>
<Lists>
<item listID="CARS">
<Description>Features</Description>
<ElementValue elementID="ACTIVE" value="0">
<Description></Description>
</ElementValue>
<ElementValue elementID="INACTIVE" value="1">
<Description></Description>
</ElementValue>
</item>
</Lists>
<Cars>
<item>
<Name>Bounty</Name>
<Values listRef="CARS"></Values>
</item>
</Cars>
</Module>
答案 0 :(得分:0)
对于交叉引用,您可以定义键<xsl:key name="by-id" match="Module/Lists/item" use="@listID"/>
,然后定义模板
<xsl:template match="Cars/item">
<xsl:variable name="referenced-items" select="key('by-id', Values/@listRef)"/>
...
</xsl:template>
可以使用key
函数引用其他项目。
这是一个完整的例子:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="5.0" indent="yes" />
<xsl:key name="by-id" match="Module/Lists/item" use="@listID"/>
<xsl:template match="Module">
<div>
<h1>Module</h1>
<xsl:apply-templates select="Cars"/>
</div>
</xsl:template>
<xsl:template match="Cars">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<xsl:template match="Cars/item">
<li>
<span><xsl:value-of select="Name"/></span>
<xsl:variable name="referenced-items" select="key('by-id', Values/@listRef)"/>
<xsl:if test="$referenced-items">
<ul>
<xsl:apply-templates select="$referenced-items/ElementValue/@value"/>
</ul>
</xsl:if>
</li>
</xsl:template>
<xsl:template match="Lists/item/ElementValue/@value">
<li>
<xsl:value-of select="."/>
</li>
</xsl:template>
</xsl:transform>
它在http://xsltransform.net/3NzcBu2在线并输出HTML
<div>
<h1>Module</h1>
<ul>
<li><span>Bounty</span><ul>
<li>0</li>
<li>1</li>
</ul>
</li>
</ul>
</div>
显示为