以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XSL/XSLT/XSL-FO/CSS 』 (http://bbs.xml.org.cn/list.asp?boardid=8) ---- xslt 循环嵌套问题(不知道是不是这么表述) (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=68926) |
-- 作者:飞花 -- 发布时间:10/31/2008 1:27:00 PM -- xslt 循环嵌套问题(不知道是不是这么表述) 有个xml文件,在根目录下有两个子节点(当然子节点下还有好多级子节点),第一个子节点是对变量的定义,包括变量名称 数据类型,初始值等信息,第二个节点是对每个变量的注释。 解析结果:把每个变量的信息都放在一起:名称,类型,初始值,注释。 问题:我在第一个节点里面做for-each循环,怎么在里面再调用模板把注释也对应进去。 |
-- 作者:Qr -- 发布时间:10/31/2008 6:14:00 PM -- 在for-each遍历定义变量的节点的同时,通过[命名模板]<xsl:call-template>调用注释节点中对应的变量注释。 <for-each ...> <xsl:value-of select="名称"/> <xsl:value-of select="类型"/> <xsl:value-of select="初始值"/> <xsl:call-template .../><!--可以结合<xsl:with-param>去传递变量以便从注释节点中取得对应的变量注释。--> </for-each> |
-- 作者:飞花 -- 发布时间:11/2/2008 2:53:00 PM -- 这种方法早就试过了,调用模板,设置参数等等,就是无法获得想要的结果。
|
-- 作者:飞花 -- 发布时间:11/2/2008 3:57:00 PM -- 我想知道如果进入到某个子级节点下进行for-each循环,在循环里是否能调用这个子级目录以外的节点数据(比如和它并列的子级节点) |
-- 作者:Qr -- 发布时间:11/3/2008 12:09:00 PM --
那我只能认为你对XSL不熟悉,特别是命名模板和XPath不熟悉。 |
-- 作者:Qr -- 发布时间:11/3/2008 12:11:00 PM --
还是XPath的问题,可以,只要指明节点路径即可。 |
-- 作者:hexun831012 -- 发布时间:11/3/2008 12:17:00 PM -- <xsl:template match="/"> <xsl:apply-templates select="你的节点名称"/> </xsl:template> <xsl:template match="你的节点名称"> <xsl:value-of select="名称"/> <xsl:value-of select="类型"/> <xsl:value-of select="初始值"/> <xsl:value-of select="comment()"/> </xsl:template> 小妹妹,你要走的路还很长。。。 QR在线!!! |
-- 作者:飞花 -- 发布时间:11/3/2008 2:11:00 PM -- 从我知道有xslt这种语言不过三五天而已,是不可能把xpath运用很熟练的。。。。。。。 现在我是先把文档里面的注释单独解析出来,然后再用document调用,合并。。。。虽然有点笨,不过结果还是出来了,现在唯一不爽的就是调用的文件名,每次都要更改,打算弄成可选的。等这个弄好再研究怎么在一个文件里解析。。。。。
|
-- 作者:飞花 -- 发布时间:11/3/2008 5:22:00 PM -- 终于搞定了。 <xsl:variable name="groupname " select="DIAGRAM/SUBST[@VAR='SGR_NAME']/@VAL "/> 定义了一个参数,然后把变量名匹配用@NAME
|
-- 作者:hexun831012 -- 发布时间:11/3/2008 5:25:00 PM -- 眼花缭乱 |
-- 作者:Qr -- 发布时间:11/3/2008 5:50:00 PM --
不能打击新人!!! 刚学几天,能这样写代码,已经不错了,虽然我不理解什么意思。 |
-- 作者:飞花 -- 发布时间:11/4/2008 6:55:00 PM -- 很乱吗?我已经简化很多了,唉,要是看见源文件的结构就不会说很乱了。。。。。。 源文件里面并不是简单的变量注释,里面有很多信息,全部是<OPERATE>并列结构。 OPERATE[count(*)=2],是选择有两个子节点的OPERATE元素。 [contains(@NAME,$groupname)],是变量名相对应那个OPERATE元素节点。 /SUBST[@VAR='RCV_LIST']/@VAL"是OPERATE元素两个子节点SUBST中VAR="RCV_LIST"的那个节点元素,然后取VAL的值就是我需要的了。。。。。 |
-- 作者:hexun831012 -- 发布时间:11/5/2008 9:20:00 AM --
你最好把文档结构发上来,可能简单得令你无法想象。 |
-- 作者:飞花 -- 发布时间:11/5/2008 10:05:00 AM -- <AUTOCREATE> <FOLDER NAME="工程"> <FOLDER NAME="项目"> <FOLDER NAME="定义"> <FOLDER NAME="Stromrichterwagen" MODULE="MDL1"> <FOLDER NAME="#SKS32" MODULE="MDL1"> <GROUP ID="P_SW_SKS32_EW_ZSGM_1" DIR="HOR" WIDTH="0" HSPACE="1" VSPACE="1"/> <DIAGRAM TEMPLATE="BL_EP_ANTIVALENT2_3.xml" NAME="#SW_SKS32_EW_ZSGM_1" GROUP="P_SW_SKS32_EW_ZSGM_1"> <SUBST VAR="CYCLE" VAL="3"/> <SUBST VAR="DELTA" VAL="500"/> <SUBST VAR="SGR_NAME" VAL="SW_SKS32_EW_ZSGM_1"/> <SUBST VAR="SIG_NAME" VAL="SW_E32"/> <SUBST VAR="CON_NAME" VAL="SW_SKS32_EW_ZSGM_1.SW_E32"/> <SUBST VAR="SIG_TYPE" VAL="ANTIVALENT2"/> </DIAGRAM> 此处省略多个<DIAGRAM>……</DIAGRAM> </FOLDER> 此处省略多个<FOLDER>……</FOLDER> </FOLDER> </FOLDER> </FOLDER> <FOLDER NAME="项目"> <FOLDER NAME="详细信息"> <FOLDER NAME="Stromrichterwagen"> <FOLDER NAME="#SKS32"> <GROUP ID="B_SW_SKS32_EW_ZSGM_1" DIR="HOR" WIDTH="0" HSPACE="1" VSPACE="1"/> <OPERATE TEMPLATE="BL_HB_DEV_3.xml" NAME="#SW_SKS32_EW_ZSGM_1" GROUP="B_SW_SKS32_EW_ZSGM_1"> <SUBST VAR="DEV_NAME" VAL="SKS32"/> </OPERATE> <OPERATE TEMPLATE="BL_HB_GROUP_3.xml" NAME="#SW_SKS32_EW_ZSGM_1" GROUP="B_SW_SKS32_EW_ZSGM_1"> <SUBST VAR="SGR_NAME" VAL="SW_SKS32_EW_ZSGM_1"/> <SUBST VAR="RCV_LIST" VAL="EW/ZSGM EW/ZSGS"/> </OPERATE> <OPERATE TEMPLATE="BL_HB_BSIGNALLIST_3.xml" NAME="#SW_SKS32_EW_ZSGM_1" GROUP="B_SW_SKS32_EW_ZSGM_1"> </OPERATE> <OPERATE TEMPLATE="BL_EB_ANTIVALENT2_3.xml" NAME="#SW_SKS32_EW_ZSGM_1" GROUP="B_SW_SKS32_EW_ZSGM_1"> <SUBST VAR="SGR_NAME" VAL="SW_SKS32_EW_ZSGM_1"/> <SUBST VAR="SIG_NAME" VAL="SW_E32"/> <SUBST VAR="CON_NAME" VAL="SW_SKS32_EW_ZSGM_1.SW_E32"/> <SUBST VAR="LABLE" VAL="SW_E32"/> </OPERATE> 此处省略多个<OPERATE></OPERATE> </FOLDER> 此处省略多个<FOLDER></FOLDER> |
-- 作者:hexun831012 -- 发布时间:11/5/2008 8:03:00 PM -- <xsl:template match="AUTOCREATE"> <xsl:apply-templates select="FOLDER"/> </xsl:template> <xsl:template match="FOLDER"> <xsl:value-of select="NAME"/> <xsl:apply-templates select="FOLDER | GROUP | DIAGRAM"/> </xsl:template> ... 你的意思是不是递归FOLDER节点,对XSL来说太容易了,你试试如上代码吧。 你的文档格式语义太弱,而且全是大写,看起来真费尽。 恕在下无能,看不懂你的文档是做啥用的。
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
97.656ms |