我正在学习XSL,并且有关于交叉引用的问题.
我的目标 XML文件的结构如下:
我的目标 XML文件的结构如下:
<XML> <Model> <packedElement typ="class" id="1"/> <packedElement typ="class" id="2"/> <packedElement typ="class" id="3"/> </Model> <Elements> <Element idref="1"> <Attributes comment="comment 1."/> </Element> <Element idref="2"> <Attributes comment="comment 2."/> </Element> <Element idref="3"> <Attributes comment="comment 3."/> </Element> </Elements> </XML>
我想连接id = idref.我的目标是列出所有packedElements并打印他们的评论.
你们能帮助我吗?
编辑:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"> <xsl:output method="xml" encoding="UTF-8"/> <xsl:key name="CommentK" match="Element" use="@idref"/> <xsl:template match="XML"> <XML> <xsl:apply-templates/> </XML> </xsl:template> <xsl:template name="Start" match="packedElement"> <xsl:variable name="TEST" select="@id"/> <xsl:variable name="Comment"> <xsl:call-template name="FindComment"> <xsl:with-param name="test2" select="@id"/> </xsl:call-template> </xsl:variable> <content comment="{$Comment}" id ="{@id}" test="{$TEST}"></content> </xsl:template> <xsl:template name="FindComment"> <xsl:param name="test2"/> <xsl:for-each select="key('CommentK','$test2')"> <xsl:value-of select="Attributes/@comment"/> </xsl:for-each> </xsl:template> </xsl:stylesheet>
XSLT版本是2.0. (顺便说一句,有人可以告诉我.XSLT和.XSL之间的区别吗?)
解决方法
尝试
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output indent="yes"/> <xsl:strip-space elements="*"/> <xsl:key name="el-by-idref" match="Elements/Element" use="@idref"/> <xsl:template match="XML"> <xsl:copy> <xsl:apply-templates select="Model/packedElement"/> </xsl:copy> </xsl:template> <xsl:template match="Model/packedElement"> <content comment="{key('el-by-idref',@id)/Attributes/@comment}" id="{@id}" test="{@id}"/> </xsl:template> </xsl:stylesheet>
那样你就得到了
<XML> <content comment="comment 1." id="1" test="1"/> <content comment="comment 2." id="2" test="2"/> <content comment="comment 3." id="3" test="3"/> </XML>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。