<ROWS>
<ROW oid="28439">
<EFL eid="8" fid="27672" count="2" Name = "A : bbb">
<MK id="3" val="0"/>
<MK id="11" val="0578678"/>
</EFL>
</ROW>
</ROWS>
我有上面的xml,我希望在XSL中有以下循环
如果EFL代码中的名称属性存在并且非空那么
显示名称属性的值
否则
做某事(我知道怎么写)
ENDIF
请注意这个 IF条件将写在行标记的for-each循环中。所以,这就是为什么我们不能使用匹配。
由于
答案 0 :(得分:2)
请参阅以下XSL。它有效,但没有测试过角落的情况。
<xsl:stylesheet version = '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="/ROWS">
<xsl:for-each select="ROW">
<xsl:choose>
<xsl:when test='string-length(EFL/@Name)>0'>
<xsl:value-of select="EFL/@Name"/>
</xsl:when>
<xsl:otherwise>I know what to do here....</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
答案 1 :(得分:1)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes"/>
<xsl:template match="/ROWS">
<xsl:apply-templates select="ROW" />
</xsl:template>
<xsl:template match="ROW[string-length(EFL/@Name)>0]">
<xsl:value-of select="EFL/@Name" />
</xsl:template>
<xsl:template match="ROW">
<xsl:text>Something else..</xsl:text>
</xsl:template>
</xsl:stylesheet>
根据您整体问题的性质,这可能是一个更好的选择;要么完全有效。严格来说,在这个例子中,即使是匹配/ROWS
的模板也是不必要的,但它可能适用于任何更复杂的模板。