<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" encoding="UTF-8"/>
<xsl:param name="contextPath">CONTEXT_PATH/</xsl:param>
<xsl:include href="xhtml.xsl"/>
<xsl:variable name="site"><xsl:value-of select="/leftnavigation/tree/path/node[2]/@name"/></xsl:variable>
<xsl:template match="leftnavigation">
<xsl:element name="h1">
<xsl:attribute name="id">banner</xsl:attribute>
<xsl:apply-templates select="bannerleftimage" />
<xsl:apply-templates select="bannermiddleimage" />
<xsl:if test="$site='Families'">
<xsl:apply-templates select="bannerrightimage" />
<!-- Just to output the value for dev purposes -->
<xsl:text><xsl:value-of select="$site"/></xsl:text>
</xsl:if>
</xsl:element>
<xsl:element name="div">
<xsl:attribute name="id">left_col</xsl:attribute>
<xsl:apply-templates select="sectionlist" />
</xsl:element>
</xsl:template>
<xsl:template match="bannerleftimage">
<xsl:variable name="currentsrc" select="@filename"/>
<xsl:variable name="origwidth">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@width"/>
</xsl:variable>
<xsl:variable name="origheight">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@height"/>
</xsl:variable>
<xsl:variable name="ratio">
<xsl:value-of select="$origwidth div $origheight"/>
</xsl:variable>
<xsl:variable name="origalt">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@alt"/>
</xsl:variable>
<xsl:variable name="origtitle">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@title"/>
</xsl:variable>
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="$contextPath"/>/home.html</xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="src"><xsl:value-of select="$contextPath"/>/images/banners/<xsl:value-of select="@filename"/></xsl:attribute>
<xsl:attribute name="width">365</xsl:attribute>
<xsl:attribute name="height">100</xsl:attribute>
<xsl:attribute name="title"><xsl:value-of select="$origtitle"/></xsl:attribute>
<xsl:attribute name="alt"><xsl:value-of select="$origalt"/></xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="bannermiddleimage">
<xsl:variable name="currentsrc" select="@filename"/>
<xsl:variable name="origwidth">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@width"/>
</xsl:variable>
<xsl:variable name="origheight">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@height"/>
</xsl:variable>
<xsl:variable name="ratio">
<xsl:value-of select="$origwidth div $origheight"/>
</xsl:variable>
<xsl:variable name="origalt">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@alt"/>
</xsl:variable>
<xsl:variable name="origtitle">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@title"/>
</xsl:variable>
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="$contextPath"/>/home.html</xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="id">banmiddle</xsl:attribute>
<xsl:attribute name="src"><xsl:value-of select="$contextPath"/>/images/banners/<xsl:value-of select="@filename"/></xsl:attribute>
<xsl:attribute name="width">1</xsl:attribute>
<xsl:attribute name="height">100</xsl:attribute>
<xsl:attribute name="title"><xsl:value-of select="$origtitle"/></xsl:attribute>
<xsl:attribute name="alt"><xsl:value-of select="$origalt"/></xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="bannerrightimage">
<xsl:variable name="currentsrc" select="@filename"/>
<xsl:variable name="origwidth">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@width"/>
</xsl:variable>
<xsl:variable name="origheight">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@height"/>
</xsl:variable>
<xsl:variable name="ratio">
<xsl:value-of select="$origwidth div $origheight"/>
</xsl:variable>
<xsl:variable name="origalt">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@alt"/>
</xsl:variable>
<xsl:variable name="origtitle">
<xsl:value-of select="//gallery/image[@filename=$currentsrc]/@title"/>
</xsl:variable>
<xsl:element name="div">
<xsl:attribute name="id">bannerright</xsl:attribute>
<xsl:element name="div">
<xsl:attribute name="id">talktoexpert</xsl:attribute>
<xsl:attribute name="title">Talk to a specialist consultant</xsl:attribute>
Talk to a specialist consultant
</xsl:element>
<xsl:element name="div">
<xsl:attribute name="id">bannertel</xsl:attribute>
<xsl:attribute name="title"><xsl:value-of select="$origtitle"/></xsl:attribute>
<xsl:value-of select="../telephone"/>
</xsl:element>
<xsl:element name="div">
<xsl:attribute name="id">bannertelint</xsl:attribute>
<xsl:attribute name="title"><xsl:value-of select="$origtitle"/></xsl:attribute>
<xsl:value-of select="../telephoneint"/>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="sectionlist">
<xsl:element name="ul">
<xsl:attribute name="id">side_menu</xsl:attribute>
<xsl:for-each select="section">
<xsl:element name="li">
<xsl:if test="@cssclass">
<xsl:attribute name="class"><xsl:value-of select="@cssclass"/></xsl:attribute>
</xsl:if>
<xsl:if test="@cssid">
<xsl:attribute name="id"><xsl:value-of select="@cssid"/></xsl:attribute>
</xsl:if>
<xsl:apply-templates select="xhtml"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:stylesheet>
我想要实现的目标:
我试图围绕模板(bannerrightimage
)设置一个条件,使其不会出现在名为'Families'
的特定品牌(在您的情况下为String)中。 @name
通常会返回三个字符串,Families
,Children
,Adults
。它适用于我的其他xsl文件。
我遇到的问题是变量$site
没有传递任何值。但如果我有类似的话:
<xsl:variable name="site"><xsl:text>ABC123</xsl:text>
$site
输出ABC123。正如我之前提到的,如果我在home.xsl中,我会将我的变量改为:
的 home.xsl
<xsl:variable name="site"><xsl:value-of select="/home/tree/path/node[2]/@name"/>
如果它是 country.xsl ,我会将变量设置为:
<xsl:variable name="site"><xsl:value-of select="/country/tree/path/node[2]/@name"/>
home.xsl和country.xsl工作得非常好但是当我为 leftnavigation.xsl $site
实现相同的样式时,没有返回任何值。甚至没有空地......
答案 0 :(得分:1)
非常感谢@Tony Graham !!当你提到“XPath匹配结构”时,我意识到我没有检查我的leftnavigation.xml文件。我意识到在所有其他xml文件中,他们的xsd
中有一个“COMMON”部分,其中包含我正在寻找的节点。但是,在我的leftnavigation.xsd
文件中,它没有该部分因此当我在寻找我正在寻找的节点时..well [NULL]。
以下是我发现的内容,home-example.xml
文件会查找noNamespacesSchemaLocation="home.xsd"
因此,在xml文件中,我正在寻找的部分是下面的节点部分。
主-的example.xml:强>
<path>
<node name="root" url="" type="ROOT" mainimage=""/>
<node name="Wildlife" type="SITE" mainimage=""/>
<node name="2006" type="VERSION" mainimage=""/>
<node name="homepages" type="SECTION" mainimage=""/>
<node name="First Home Page" url="/home/home.html" mainimage=""/>
</path>
因此在xsd中,有一个Commons
部分,如下所示:
的 home.xsd:强>
================共同================================= =
</xs:documentation>
</xs:annotation>
<xs:element name="node">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element ref="xhtml"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="url" type="xs:string"/>
<xs:attribute name="abstract" type="xs:string"/>
<xs:attribute name="mainimage" type="xs:string"/>
<xs:attribute name="type" type="xs:string"/>
<xs:attribute name="metadata" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="sectionimg">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="alt" type="xs:string"/>
<xs:attribute name="width" type="xs:string"/>
<xs:attribute name="height" type="xs:string"/>
<xs:attribute name="id" type="xs:string"/>
<xs:attribute name="class" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:complexType name="treeType">
<xs:sequence>
<xs:element name="parent">
<xs:complexType>
<xs:sequence>
<xs:element ref="node" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="children">
<xs:complexType>
<xs:sequence>
<xs:element ref="node" minOccurs="0" maxOccurs="100"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="siblings">
<xs:complexType>
<xs:sequence>
<xs:element ref="node" minOccurs="0" maxOccurs="100"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="path">
<xs:complexType>
<xs:sequence>
<xs:element ref="node" minOccurs="0" maxOccurs="100"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
但是,在我的leftnavigation-example.xml和我的leftnavigation.xsd中,当我尝试调用变量时,我没有xsd中的commons部分和xml中的nodes部分: / p>
<xsl:variable name="site"><xsl:value-of select="/leftnavigation/tree/path/node[2]/@name"/></xsl:variable>
我没有得到任何回复,因为所选路径的值不存在。
再次感谢@tony graham指出我正确的方向......