以下是示例XML文件 -
<?xml version="1.0" encoding="UTF-8"?>
<Catalog>
<Book>
<AName>Steven Holzner</AName>
<BName>Using XSLT</BName>
<Pub>ABC Publication </Pub>
<Web>http://www.ABCPub.com</Web>
</Book>
<Book>
<AName>Steven Holzner</AName>
<BName>Using HTML</BName>
<Pub>XYZ Publication </Pub>
<Web></Web>
</Book>
</Catalog>
如果给出了Web地址,我想超链接Pub名称,其他只有Pub名称没有链接...
我的XSL代码在这里 -
<xsl:template match="Catalog">
<xsl:for-each select="Book">
<p><a>
<xsl:attribute name="href">
<xsl:value-of select="Web"/>
</xsl:attribute>
<xsl:value-of select="Pub"/>
</a></p>
</xsl:for-each>
</xsl:template>
我想要关注HTML源代码 -
&lt; p&gt;&lt; a href =“http://www.ABCPub.com”&gt; ABC出版物&lt; / a&gt;&lt; / p&gt; &lt; p&gt; XYZ出版物&lt; / a&gt;&lt; / p&gt;
右键,即使没有给出Web地址,这个XSL也会给出超链接标记。 什么样的代码可以满足需要..?
度过愉快的一天 - 约翰
答案 0 :(得分:1)
只测试网络是否填充了select / when / else
<xsl:template match="Catalog">
<xsl:for-each select="Book">
<p><xsl:choose>
<xsl:when test="string(Web)"><a>
<xsl:attribute name="href">
<xsl:value-of select="Web"/>
</xsl:attribute>
<xsl:value-of select="Pub"/>
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="Pub"/>
</xsl:othwerwise>
</xsl:choose>
</p>
</xsl:for-each>
</xsl:template>
答案 1 :(得分:1)
这可以通过非常简短的转换来实现 - 没有<xsl:for-each>
,没有<xsl:if>
,<xsl:choose>
,<xsl:when>
,没有{{1}完全:
<xsl:attribute>
将此转换应用于提供的XML文档:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="Book[Web/text()]">
<p>
<a href="{Web}">
<xsl:value-of select="Pub"/>
</a>
</p>
</xsl:template>
<xsl:template match="Book">
<p>
<xsl:value-of select="Pub"/>
</p>
</xsl:template>
</xsl:stylesheet>
产生了想要的正确结果:
<Catalog>
<Book>
<AName>Steven Holzner</AName>
<BName>Using XSLT</BName>
<Pub>ABC Publication </Pub>
<Web>http://www.ABCPub.com</Web>
</Book>
<Book>
<AName>Steven Holzner</AName>
<BName>Using HTML</BName>
<Pub>XYZ Publication </Pub>
<Web></Web>
</Book>
</Catalog>
解释:模板模式匹配。
答案 2 :(得分:0)
<xsl:if test="Web != ''">
<a>
<xsl:attribute name="href">
<xsl:value-of select="Web"/>
</xsl:attribute>
<xsl:value-of select="Pub"/>
</a>
</xsl:if>
^仅当有网址时才会显示发布者,你想要的是xsl:select ...
<xsl:choose>
<xsl:when test="Web != ''">
<a>
<xsl:attribute name="href">
<xsl:value-of select="Web"/>
</xsl:attribute>
<xsl:value-of select="Pub"/>
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="Pub"/>
</xsl:otherwise>
</xsl:choose>