-- 作者:ehrchina
-- 发布时间:9/23/2010 9:18:00 AM
-- [求助]请师兄们帮我看看如何利用xsl获取xml文件中的值并产生相应链接
我想实现的效果如下: 原文地址:http://www.youku.com/v_olist/c_97_a_大陆_fc__fe__s__g_都市_r_2010_d_1_fv_0_fl__o_7.html 下面是我建立的4个筛选字段: VideoType 视频类型 (多选) 在第一行显示 Country 国家地区 (单选) 在第二行显示 ReleaseYear 上映年份 (单选) 在第三行显示 Initials 首写字母 (单选) 在第四行显示 我想实现的链接模式为: /Index.aspx?VideoType=0&Country=0&ReleaseYear=0&Initials=0 (这里的VideoType=0 Country=0 ReleaseYear=0 Initials=0 中的 0是根据xml文件中的id来变化 ) 链接规律为:当点击其中一行后(如第一行),点击另一行时(如第二行)上一行获取的id不变,仅此行获取的id变化(第一行获取的id不变),以此类推. 我使用的是动易的cms sf3.5 sql2000+net2.0 下面我自己建立了4个文件,师兄们有用到的部分可以把代码直接拷贝过去使用,这样就给您节省下写代码的时间了,在此先感谢各个热心的师兄们,学弟在这里给你带上一份祝福:祝中秋节快乐,祝您身体健康,事事顺利. 我建立了2个xml文件 (由于选项(name)过多,我省略对了一部分,不影响功能的实现) xml数据部分:dianshiju.xml <CATALOG> <VideoType category="1"> <item><name>全部</name><id>0</id></item> <item><name>爱情</name><id>1</id></item> <item><name>财经</name><id>2</id></item> </VideoType> <Country category="2"> <item><name>全部</name><id>0</id></item> <item><name>澳大利亚</name><id>1</id></item> <item><name>大陆</name><id>2</id></item> </Country> <ReleaseYear category="3"> <item><name>全部</name><id>0</id></item> <item><name>2010</name><id>2010</id></item> <item><name>2009</name><id>2009</id></item> </ReleaseYear> <Initials category="4"> <item><name>全部</name><id>0</id></item> <item><name>A</name><id>1</id></item> <item><name>B</name><id>2</id></item> </Initials> </CATALOG> xml数据链接部分:dianshiju_y.xml (<ModelID>103</ModelID>这里我选择的模型是相同的,也可以变化) <NewDataSet> <table> <ModelID>103</ModelID> <Field> <ArrayOfFieldInfo> <FieldInfo Id="VideoType" name="视频类型" OrderId="1"> <Settings> <string> 全部|0$$$爱情|1$$$财经|2$$$短片|3 </string> </Settings> </FieldInfo> </ArrayOfFieldInfo> </Field> </table> <table> <ModelID>103</ModelID> <Field> <ArrayOfFieldInfo> <FieldInfo Id="Country" name="国家地区" OrderId="2"> <Settings> <string> 全部|0$$$澳大利亚|1$$$大陆|2 </string> </Settings> </FieldInfo> </ArrayOfFieldInfo> </Field> </table> <table> <ModelID>103</ModelID> <Field> <ArrayOfFieldInfo> <FieldInfo Id="ReleaseYear" name="上映年份" OrderId="3"> <Settings> <string> 全部|0$$$2010|2010$$$2009|2009 </string> </Settings> </FieldInfo> </ArrayOfFieldInfo> </Field> </table> <table> <ModelID>103</ModelID> <Field> <ArrayOfFieldInfo> <FieldInfo Id="Initials" name="首写字母" OrderId="4"> <Settings> <string> 全部|0$$$A|1$$$B|2 </string> </Settings> </FieldInfo> </ArrayOfFieldInfo> </Field> </table> </NewDataSet> xsl文件为2个,其中的代码是抄取其他人的不知是否正确. 第一个xsl文件: 标签(xml数据源调用上面第二个xml) <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl=" http://www.w3.org/1999/XSL/Transform" xmlns:pe="labelproc" exclude-result-prefixes="pe"> <xsl:output method="html" /> <xsl:template match="/"> <CATALOG> <xsl:apply-templates/> </CATALOG> </xsl:template> <xsl:template match="table"> 下面的VideoType这样写不知是否正确 <VideoType category="{ModelID}"> <xsl:apply-templates select="Field/ArrayOfFieldInfo/FieldInfo/Settings/string"/> </VideoType> </xsl:template> 以下是我乱添加的 <xsl:template match="table"> <Country category="{ModelID}"> <xsl:apply-templates select="Field/ArrayOfFieldInfo/FieldInfo/Settings/string"/> </Country> </xsl:template> <xsl:template match="table"> <ReleaseYear category="{ModelID}"> <xsl:apply-templates select="Field/ArrayOfFieldInfo/FieldInfo/Settings/string"/> </ReleaseYear> </xsl:template> <xsl:template match="table"> <Initials category="{ModelID}"> <xsl:apply-templates select="Field/ArrayOfFieldInfo/FieldInfo/Settings/string"/> </Initials> </xsl:template> 以上是我乱添加的. <xsl:template match="Settings/string"> <xsl:variable name="v_content" select="."/> <xsl:call-template name="f-output-item"> <xsl:with-param name="p_content" select="$v_content"/> </xsl:call-template> </xsl:template> <xsl:template name="f-output-item"> <xsl:param name="p_content"/> <xsl:if test="normalize-space($p_content) != ''"> <xsl:choose> <xsl:when test="contains($p_content,'$$$')"> <xsl:variable name="v_sub_content1" select="substring-before($p_content,'$$$')"/> <xsl:variable name="v_sub_content2" select="substring-after($p_content,'$$$')"/> <item> <name> <xsl:value-of select="substring-before($v_sub_content1,'|')"/> </name> <id> <xsl:value-of select="substring-after($v_sub_content1,'|')"/> </id> </item> <xsl:call-template name="f-output-item"> <xsl:with-param name="p_content" select="$v_sub_content2"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <item> <name> <xsl:value-of select="substring-before($p_content,'|')"/> </name> <id> <xsl:value-of select="substring-after($p_content,'|')"/> </id> </item> </xsl:otherwise> </xsl:choose> </xsl:if> </xsl:template> </xsl:stylesheet> 第二个xsl文件: 标签(xml数据源调用第一个xml),筛选的链接部分,这里我想实现这样的效果: /Index.aspx?VideoType=0&Country=0&ReleaseYear=0&Initials=0 <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl=" http://www.w3.org/1999/XSL/Transform" xmlns:pe="labelproc" exclude-result-prefixes="pe"> <xsl:param name="modeId" /> <xsl:param name="nodeId" /> <xsl:param name="videotypeId" /> <xsl:param name="CountryId" /> <xsl:param name="ReleaseYearId" /> <xsl:param name="InitialsId" /> <xsl:output method="html" /> <xsl:template match="/"> 以下内容是抄的人家的 <xsl:for-each select="/CATALOG/edition[@category=$modeId]/item"> <li id="MenuID_2_{position()-1}"> <a href="/Category_{$nodeId}/Index.aspx?edition={id}"> <xsl:value-of select="name"/> </a> </li> </xsl:for-each> 以上内容是抄的人家的 </xsl:template> </xsl:stylesheet> 假如有更好的办法,也可以写出来,在此感谢师兄师姐们了.
|