我正在尝试在xml文件中打印title和dob列表。但我无法在代码中找到错误。我正在尝试这样来理解参数在xsl中的工作原理
这是xml代码
<?xml-stylesheet type="text/xsl" href="aa.xslt"?>
<tutorial>
<section>
<title>Gene Splicing for Young People</title>
<panel>
<title>Introduction1</title>
<dob>86</dob>
<dof>86</dof>
<!-- ... -->
</panel>
<panel>
<title>Discovering the secrets of life and creation</title>
<dob>85</dob>
<!-- ... -->
</panel>
<panel>
<title>"I created him for good, but he's turned out evil!"</title>
<dob>84</dob>
<!-- ... -->
</panel>
<panel>
<title>When angry mobs storm your castle</title>
<dob>88</dob>
<!-- ... -->
</panel>
</section>
</tutorial>
这是xslt代码
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:template match="tutorial/section/panel">
<xsl:call-tempate name="boo">
<xsl:with-param name="myname" select="title" />
<xsl:with-param name="mydob" select="dob" />
</xsl:call-template>
</xsl:template>
<xsl:template name="boo">
<xsl:param name="myname" select="'Not Available'" />
<xsl:param name="mydob" select="'Not Available'" />
<div>
NAME: <xsl:value-of select="$myname" />
<br />
DOB: <xsl:value-of select="$mydob" />
<hr />
</div>
</xsl:template>
</xsl:stylesheet>
期待输出是, 导言1 86
发现...... 85
等等。
答案 0 :(得分:1)
看起来您正在尝试输出面板的标题,因此请尝试更改:
<xsl:template match="tutorial/section">
为:
<xsl:template match="tutorial/section/panel">
修改强>
如果您遇到“不可用”问题,那是因为当元素不存在时,您将参数传递为空字符串,并且它会覆盖默认值。
您可以执行以下操作:
<xsl:template match="tutorial/section/panel">
<xsl:call-template name="boo">
<xsl:with-param name="myname">
<xsl:choose>
<xsl:when test="title">
<xsl:value-of select="title"/>
</xsl:when>
<xsl:otherwise>Not Available</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
<xsl:with-param name="mydob">
<xsl:choose>
<xsl:when test="dob">
<xsl:value-of select="dob"/>
</xsl:when>
<xsl:otherwise>Not Available</xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
或类似的东西:
<xsl:template match="tutorial/section/panel">
<xsl:choose>
<xsl:when test="title and dob">
<xsl:call-template name="boo">
<xsl:with-param name="myname" select="title" />
<xsl:with-param name="mydob" select="dob" />
</xsl:call-template>
</xsl:when>
<xsl:when test="dob">
<xsl:call-template name="boo">
<xsl:with-param name="mydob" select="dob" />
</xsl:call-template>
</xsl:when>
<xsl:when test="title">
<xsl:call-template name="boo">
<xsl:with-param name="myname" select="title" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="boo"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>