我在XSLT中访问变量时遇到问题 我只是将var定义为:
<xsl:variable name="myName" select="@owner"/>
当我使用此代码时,它不起作用:
<title>{$myName}</title>
但是这段代码有效:
<title><xsl:value-of select="$myName"/></title>
我想将上面的变量与XML中的每个来自实体进行比较 当来自实体的值等于 myName 时,我会显示一些代码,否则会显示另一个代码
<xsl:for-each select="message">
<xsl:choose>
<xsl:when test="from = $myName">
...
</xsl:when>
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
XML文件包含以下信息:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="history.xsl"?>
<history xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="history.xsd" owner="Mike">
<message>
<from>Mike</from>
<to>Gem</to>
<date>2002-09-24</date>
<color>red</color>
<size>20</size>
<family>cursive</family>
<style>overline</style>
<body>welcome</body>
</message>
</history>
答案 0 :(得分:0)
这是一个XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:variable name="myName" select="/history/@owner"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="message">
<xsl:choose>
<xsl:when test="from = $myName">
Mike message
</xsl:when>
<xsl:otherwise>
Other message
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:transform>
它将在执行开始时拉取值并将其放入&#34; myName&#34;变量
然后,我匹配标签名称(消息)并像你一样使用XSL选择。
你也可以避免使用xsl:选择这样做:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:variable name="myName" select="/history/@owner"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="message[from=$myName]">
Mike message
</xsl:template>
<xsl:template match="message">
Other message
</xsl:template>
</xsl:transform>
这显示了一些重要的事情:XSL选择第一个匹配的模板!
第二种选择更适合模块化。第一个意味着筑巢。这第二个没有!
在线测试: