:::::[请教XML高手,这个XSL该如何写!(300分)]::::: (100分)

  • 主题发起人 主题发起人 iapollo
  • 开始时间 开始时间
I

iapollo

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个xml文件如下,是用asp动态生成的。现在的问题是
如何写一个xsl,要求根据<class_cur>的值和<class_father>
的class_no属性对比,相同时输出相应的china_name属性的值。
如当<class_cur>的值为2时,输出“分类二”,
当<class_cur>的值为3时,输出“分类三”,
当<class_cur>的值为14时,输出“分类一”。
如有难度,300分送出!
<?xml version="1.0" encoding="gb2312" ?>
<document>
<class_cur>2</class_cur>
<class_father china_name="分类二" class_no="2">
<class_sub china_name="分类二的子类" class_no="13" />
</class_father>
<class_father china_name="分类三" class_no="3" />
<class_father china_name="分类六" class_no="6" />
<class_father china_name="铁质模型" class_no="7" />
<class_father china_name="新父类" class_no="10">
<class_sub china_name="新子类1" class_no="9" />
<class_sub china_name="新子类2" class_no="11" />
</class_father>
<class_father china_name="分类一" class_no="14">
<class_sub china_name="分类一的子类" class_no="12" />
</class_father>
<class_father china_name="class_5" class_no="15">
<class_sub china_name="分类五" class_no="5" />
</class_father>
</document>
 
这一功能已完全实现!!!
用于测试的 xxx.xml
<?xml version="1.0" encoding="gb2312" ?>
<?xml-stylesheet type="text/xsl" href="xxx.xsl"?>
<document>
<class_cur>2</class_cur>
<class_father china_name="分类二" class_no="2">
<class_sub china_name="分类二的子类" class_no="13" />
</class_father>
<class_father china_name="分类三" class_no="3" />
<class_father china_name="分类六" class_no="6" />
<class_father china_name="铁质模型" class_no="7" />
<class_father china_name="新父类" class_no="10">
<class_sub china_name="新子类1" class_no="9" />
<class_sub china_name="新子类2" class_no="11" />
</class_father>
<class_father china_name="分类一" class_no="14">
<class_sub china_name="分类一的子类" class_no="12" />
</class_father>
<class_father china_name="class_5" class_no="15">
<class_sub china_name="分类五" class_no="5" />
</class_father>
</document>

样式文件 xxx.xsl
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40">
<xsl:output method='html' />
<xsl:template match="/document">
<html><body>
<xsl:apply-templates select="class_father"/>
</body></html>
</xsl:template>
<xsl:template match="class_father">
<xsl:if test="@class_no = ../class_cur">
<xsl:value-of select="@china_name"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
 
加分吧!
 
2jsxjd:感谢您的提醒,以下是我完成的语句:
代码:
<xsl:value-of select="document/class_father[@class_no=../class_cur]/@china_name"/>
分先给您记着,我还有两个问题
<xsl:variable>和<xsl:param>、<xsl:with-param>是什么意思,怎么用?
一天后给您分。
 
你的文档最终可以写成:
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40">
<xsl:output method='html' />
<xsl:template match="/document">
<html><body>
<xsl:value-of select="class_father[@class_no=../class_cur]/@china_name"/>
</body></html>
</xsl:template>
</xsl:stylesheet>
如果用xsl:variable ,可以改写成:
<xsl:template match="/document">
<html><body>
<xsl:variable name="n" select="class_cur"/>
<xsl:value-of select="class_father[@class_no=$n]/@china_name"/>
</body></html>
</xsl:template>
<xsl:param>用来在模板或样式中声明参数。
<xsl:with-param>调用模板时,传递参数值。
有点画蛇添足,以下是一个和上面功能相同的样式,
<xsl:variable>和<xsl:param>、<xsl:with-param>全用上了
<?xml version="1.0" encoding="gb2312" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40">
<xsl:output method='html' />
<xsl:template match="/document">
<html><body>
<xsl:variable name="n" select="class_cur"/>
<xsl:apply-templates select="class_father[@class_no=$n]"/>
</body></html>
</xsl:template>
<xsl:template match="class_father">
<xsl:call-template name="showit">
<xsl:with-param name="myvalue" select="@china_name"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="showit">
<xsl:param name="myvalue"></xsl:param>
<xsl:value-of select="$myvalue"/>
</xsl:template>
</xsl:stylesheet>
 
后退
顶部