获取模板以根据传入参数的条件结果将 class 应用于跨度
Getting a template to apply a class to a span based on conditional results of passed in parameters
这只是一个测试脚本,如果需要,我可以提供两个测试 XML 数据块。
剧本:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msa="http://www.publictalksoftware.co.uk/msa">
<xsl:output method="html" indent="yes" version="4.01"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:variable name="PubDB" select="document('MSA_PublisherDatabase.XML')"/>
<xsl:template match="/">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Test</title>
</head>
<body>
<xsl:for-each select="MeetingWorkBook/Meeting">
<xsl:call-template name="IsAvailableMidweek">
<xsl:with-param name="strName" select="Chairman"/>
</xsl:call-template>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template name="IsAvailableMidweek">
<xsl:param name="strName"/>
<xsl:variable name="thePublisher" select="$PubDB/msa:PublisherDatabase/msa:Publishers/msa:Publisher[msa:Name=$strName]"/>
<xsl:if test="$thePublisher">
<xsl:choose>
<xsl:when test="$thePublisher/msa:Availability/@Midweek='false'">
<p>Not available @Midweek</p>
</xsl:when>
<xsl:otherwise>
<xsl:variable name ="datMonth" select="format-number(MeetingDate/@Month,'00')"/>
<xsl:variable name ="datDay" select="format-number(MeetingDate/@Day,'00')"/>
<xsl:variable name="datMeeting" select="concat(MeetingDate/@Year, '-', $datMonth, '-', $datDay)"/>
<xsl:choose>
<xsl:when test="$thePublisher/msa:Availability/msa:DatesNotAvailable[msa:Date=$datMeeting]">
<p>
<xsl:text>Not available for date </xsl:text>
<xsl:value-of select="$datMeeting"/>
</p>
</xsl:when>
<xsl:otherwise>
<p>Available</p>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
我一直在研究 IsAvailableMidweek
模板,原则上它可以工作。它显示的内容是为了调试目的。
我面临的挑战是我想在 span
中显示(这个特定案例)主席作为文本。如果他被确定为“不可用”,那么我想将 NotAvailable
的 class 应用到 span
对象。
我知道如何在 span
中显示值。这很简单。但是如何调整我写的模板IsAvailableMidweek
,如果它确定此人不可用,它可以应用这个class?
我希望这是有道理的。我不认为我可以在 XSLT-1 中使用函数。
我不知道这是否是最好的方法,但它似乎符合我的要求:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msa="http://www.publictalksoftware.co.uk/msa">
<xsl:output method="html" indent="yes" version="4.01"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:variable name="PubDB" select="document('MSA_PublisherDatabase.XML')"/>
<xsl:template match="/">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Test</title>
</head>
<body>
<xsl:for-each select="MeetingWorkBook/Meeting">
<p>
<xsl:call-template name="SetClassName">
<xsl:with-param name="strName" select="Chairman"/>
</xsl:call-template>
<xsl:value-of select="Chairman"/>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template name="SetClassName">
<xsl:param name="strName"/>
<xsl:variable name="thePublisher" select="$PubDB/msa:PublisherDatabase/msa:Publishers/msa:Publisher[msa:Name=$strName]"/>
<xsl:if test="$thePublisher">
<xsl:choose>
<xsl:when test="$thePublisher/msa:Availability/@Midweek='false'">
<xsl:attribute name="class">NotAvailable</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:variable name ="datMonth" select="format-number(MeetingDate/@Month,'00')"/>
<xsl:variable name ="datDay" select="format-number(MeetingDate/@Day,'00')"/>
<xsl:variable name="datMeeting" select="concat(MeetingDate/@Year, '-', $datMonth, '-', $datDay)"/>
<xsl:choose>
<xsl:when test="$thePublisher/msa:Availability/msa:DatesNotAvailable[msa:Date=$datMeeting]">
<xsl:attribute name="class">NotAvailable</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<!-- Available — Do Further Tests -->
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
这只是一个测试脚本,如果需要,我可以提供两个测试 XML 数据块。
剧本:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msa="http://www.publictalksoftware.co.uk/msa">
<xsl:output method="html" indent="yes" version="4.01"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:variable name="PubDB" select="document('MSA_PublisherDatabase.XML')"/>
<xsl:template match="/">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Test</title>
</head>
<body>
<xsl:for-each select="MeetingWorkBook/Meeting">
<xsl:call-template name="IsAvailableMidweek">
<xsl:with-param name="strName" select="Chairman"/>
</xsl:call-template>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template name="IsAvailableMidweek">
<xsl:param name="strName"/>
<xsl:variable name="thePublisher" select="$PubDB/msa:PublisherDatabase/msa:Publishers/msa:Publisher[msa:Name=$strName]"/>
<xsl:if test="$thePublisher">
<xsl:choose>
<xsl:when test="$thePublisher/msa:Availability/@Midweek='false'">
<p>Not available @Midweek</p>
</xsl:when>
<xsl:otherwise>
<xsl:variable name ="datMonth" select="format-number(MeetingDate/@Month,'00')"/>
<xsl:variable name ="datDay" select="format-number(MeetingDate/@Day,'00')"/>
<xsl:variable name="datMeeting" select="concat(MeetingDate/@Year, '-', $datMonth, '-', $datDay)"/>
<xsl:choose>
<xsl:when test="$thePublisher/msa:Availability/msa:DatesNotAvailable[msa:Date=$datMeeting]">
<p>
<xsl:text>Not available for date </xsl:text>
<xsl:value-of select="$datMeeting"/>
</p>
</xsl:when>
<xsl:otherwise>
<p>Available</p>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
我一直在研究 IsAvailableMidweek
模板,原则上它可以工作。它显示的内容是为了调试目的。
我面临的挑战是我想在 span
中显示(这个特定案例)主席作为文本。如果他被确定为“不可用”,那么我想将 NotAvailable
的 class 应用到 span
对象。
我知道如何在 span
中显示值。这很简单。但是如何调整我写的模板IsAvailableMidweek
,如果它确定此人不可用,它可以应用这个class?
我希望这是有道理的。我不认为我可以在 XSLT-1 中使用函数。
我不知道这是否是最好的方法,但它似乎符合我的要求:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msa="http://www.publictalksoftware.co.uk/msa">
<xsl:output method="html" indent="yes" version="4.01"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:variable name="PubDB" select="document('MSA_PublisherDatabase.XML')"/>
<xsl:template match="/">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Test</title>
</head>
<body>
<xsl:for-each select="MeetingWorkBook/Meeting">
<p>
<xsl:call-template name="SetClassName">
<xsl:with-param name="strName" select="Chairman"/>
</xsl:call-template>
<xsl:value-of select="Chairman"/>
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template name="SetClassName">
<xsl:param name="strName"/>
<xsl:variable name="thePublisher" select="$PubDB/msa:PublisherDatabase/msa:Publishers/msa:Publisher[msa:Name=$strName]"/>
<xsl:if test="$thePublisher">
<xsl:choose>
<xsl:when test="$thePublisher/msa:Availability/@Midweek='false'">
<xsl:attribute name="class">NotAvailable</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:variable name ="datMonth" select="format-number(MeetingDate/@Month,'00')"/>
<xsl:variable name ="datDay" select="format-number(MeetingDate/@Day,'00')"/>
<xsl:variable name="datMeeting" select="concat(MeetingDate/@Year, '-', $datMonth, '-', $datDay)"/>
<xsl:choose>
<xsl:when test="$thePublisher/msa:Availability/msa:DatesNotAvailable[msa:Date=$datMeeting]">
<xsl:attribute name="class">NotAvailable</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<!-- Available — Do Further Tests -->
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>