我希望我的XSLT检查以检查随机panelTabs中的所有<field>
是否为空。如果它们都是空的,我希望它返回<p>All are empty</p>
,但如果它们不是,我希望带有字段的panelTabs的内容位于<div id='tabItems'>
内,具有相同位置的那个在XML中。请帮帮我。
XML:
<document>
<contentTabs>
<panelTabs text='a'>
<row type='header'>
<column>H1</column>
<column>H2</column>
</row>
<row type='data'>
<column>D1</column>
<column>D2</column>
</row>
</panelTabs>
<panelTabs text='b'>
<field> </field>
<field> </field>
</panelTabs>
<panelTabs text='c'>
<field>x1</field>
<field>x2</field>
</panelTabs>
<contentTabs>
</document>
当前的XSLT:
<xsl:template match='contentTabs'>
<ul id='ulTabKopjes' class='tabKopjes'>
<li onclick='verschuifTabs(this)'><</li>
<xsl:call-template name='liHeaders' />
<li onclick='verschuifTabs(this)'>></li>
</ul>
<div class='tabContent'>
<xsl:apply-templates />
</div>
</xsl:template>
<xsl:template name='liHeaders'>
<xsl:for-each select='panelTabs'>
<li onclick='loadPanelTabContent(this)'>
<xsl:value-of select="@text" />
</li>
</xsl:for-each>
</xsl:template>
<xsl:template match="panelTabs">
<div class="tabItems">
<xsl:attribute name="id">
<xsl:text>tabnr</xsl:text><xsl:value-of select="position()" />
</xsl:attribute>
<xsl:apply-templates />
</div>
</xsl:template>
<xsl:template match="panelTabs[not(field[normalize-space()])]">
<p>All are empty</p>
</xsl:template>
<xsl:template match="panelTabs/field">
<p><xsl:value-of select="." /></p>
</xsl:template>
<xsl:template match="panelTabs/field[not(normalize-space())]" priority="2" />
仅在没有最后<panelTabs>
想要输出,例如:
<ul id='ulTabKopjes' class='tabKopjes'>
<li onclick='verschuifTabs(this)'><</li>
<li onclick='loadPanelTabContent(this)'>a</li>
<li onclick='loadPanelTabContent(this)'>b</li>
<li onclick='loadPanelTabContent(this)'>c</li>
<li onclick='verschuifTabs(this)'>></li>
</ul>
<div id='tabContent'>
<div class='tabItems' id='tabnr1'>
<table>something</table>
</div>
<div class='tabItems' id='tabnr2'>
<p>All fields are empty</p>
</div>
<div class='tabItems' id='tabnr3'>
<p>x1</p>
<p>x2</p>
</div>
</div>
答案 0 :(得分:2)
试试这个样式表:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes" omit-xml-declaration="yes"/>
<xsl:template match='contentTabs'>
<ul id='ulTabKopjes' class='tabKopjes'>
<li onclick='verschuifTabs(this)'><</li>
<xsl:call-template name='liHeaders' />
<li onclick='verschuifTabs(this)'>></li>
</ul>
<div class='tabContent'>
<xsl:apply-templates />
</div>
</xsl:template>
<xsl:template name='liHeaders'>
<xsl:for-each select='panelTabs'>
<li onclick='loadPanelTabContent(this)'>
<xsl:value-of select="@text" />
</li>
</xsl:for-each>
</xsl:template>
<xsl:template match="panelTabs">
<div class="tabItems">
<xsl:attribute name="id">
<xsl:text>tabnr</xsl:text><xsl:value-of select="position()" />
</xsl:attribute>
<xsl:choose>
<xsl:when test="field and field = ''">
<p>All are empty</p>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates />
</xsl:otherwise>
</xsl:choose>
</div>
</xsl:template>
<xsl:template match="panelTabs/field[.!='']">
<p><xsl:value-of select="." /></p>
</xsl:template>
<xsl:template match="panelTabs/row">
<table>something</table>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
您可以使用以下内容。 请注意,您的输出不是格式良好的XML。如果您希望它形成良好,请添加根元素。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match='contentTabs'>
<ul id='ulTabKopjes' class='tabKopjes'>
<li onclick='verschuifTabs(this)'><</li>
<xsl:call-template name='liHeaders' />
<li onclick='verschuifTabs(this)'>></li>
</ul>
<div class='tabContent'>
<xsl:apply-templates />
</div>
</xsl:template>
<xsl:template name='liHeaders'>
<xsl:for-each select='panelTabs'>
<li onclick='loadPanelTabContent(this)'>
<xsl:value-of select="@text" />
</li>
</xsl:for-each>
</xsl:template>
<xsl:template match="panelTabs">
<div class="tabItems">
<xsl:attribute name="id">
<xsl:text>tabnr</xsl:text>
<xsl:value-of select="position()" />
</xsl:attribute>
<xsl:apply-templates />
</div>
</xsl:template>
<xsl:template match="panelTabs[field[normalize-space() = '']]">
<div class="tabItems">
<p>All fields are empty</p>
</div>
</xsl:template>
<xsl:template match="panelTabs[not(field)]">
<div class="tabItems">
<table>something</table>
</div>
</xsl:template>
<xsl:template match="panelTabs/field">
<p>
<xsl:value-of select="." />
</p>
</xsl:template>
</xsl:stylesheet>