如何使用xslt从XML读取注释并在元素中添加注释文本
发布时间:2020-12-16 05:35:05 所属栏目:百科 来源:网络整理
导读:我正在使用XSLT和 XML. 我和我一起得到了以下XML. ?xml version="1.0" encoding="UTF-8"?mappings !-- News mapping -- mapping old="mbp" new="/SessionHandler.aspx?pageurl=/BP.aspxamp;pub=/englishamp;section=IBEamp;j=f"/ mapping old="about/news" n
我正在使用XSLT和
XML.
我和我一起得到了以下XML. <?xml version="1.0" encoding="UTF-8"?> <mappings> <!-- News mapping --> <mapping old="mbp" new="/SessionHandler.aspx?pageurl=/BP.aspx&pub=/english&section=IBE&j=f"/> <mapping old="about/news" new="about/news/news.aspx"/> <!-- CUGO's--> <mapping old="/nhs" new="/cugo.aspx?promoCode=UKNHS01&pub=/uk/english"/> <mapping old="/hk/ukstudentfare" new="/cugo.aspx?promoCode=HKSTU10&pub=/hk/Chinese"/> <!-- Reserved below vanity URL's --> <mapping old="/kgfmastercard" new=""/> <mapping old="/mastercard" new=""/> <!-- Other vanity URL's--> <mapping old="/destinationbriefs" new="http://www.ekgroup.com/destinationbriefs"/> <mapping old="/win" new="/ch/german/destinations_offers/win_two_tickets_on_A380.aspx"/> <!--FIFA Fan Fest--> <mapping old="/romefanfest" new="/it/italian/destinations_offers/rome_international_fifa_fan_fest.aspx"/> <mapping old="/parisfanfest" new="/fr/french/destinations_offers/paris_international_fifa_fan_fest.aspx"/> </mappings> 下面是我正在使用的xslt <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="xsl fo"> <xsl:output method="xml" indent="yes" /> <xsl:template match="/"> <xsl:for-each select="mappings/mapping"> <VanityUrl> <old> <xsl:value-of select="@old" /> </old> <new> <xsl:value-of select="@new" /> </new> <dateAdded>2010-05-03T14:45:00</dateAdded> <xsl:if test="@new = ''"> <NotLive>Yes</NotLive> </xsl:if> <xsl:if test="preceding-sibling::comment()"> <comments> <xsl:value-of select="preceding-sibling::comment()" /> </comments> </xsl:if> </VanityUrl> </xsl:for-each> </xsl:template> </xsl:stylesheet> 现在我想得到的结果如下: <VanityUrl> <old>/mbp</old> <new>/SessionHandler.aspx?pageurl=/BP.aspx&pub=/english&section=IBE&j=f</new> <dateAdded>2010-05-03T14:45:00 </dateAdded> <comment>News mapping</comments> </VanityUrl> <VanityUrl> <old>about/news</old> <new>about/news/news.aspx</new> <dateAdded>2010-05-03T14:45:00 </dateAdded> <comment>News mapping</comments> </VanityUrl> <VanityUrl> <old>/nhs</old> <new>/cugo.aspx?promoCode=UKNHS01&pub=/uk/english</new> <dateAdded>2010-05-03T14:45:00 </dateAdded> <comment>CUGO's</comments> </VanityUrl> <VanityUrl> <old>/hk/ukstudentfare</old> <new>/cugo.aspx?promoCode=HKSTU10&pub=/hk/Chinese</new> <dateAdded>2010-05-03T14:45:00 </dateAdded> <comment>CUGO's</comments> </VanityUrl> <VanityUrl> <old>/kgfmastercard</old> <new></new> <NotLive>yes</NotLive> <dateAdded>2010-05-03T14:45:00 </dateAdded> <comment>Reserved below vanity URL's</comments> </VanityUrl> <VanityUrl> <old>/mastercard</old> <new></new> <NotLive>yes</NotLive> <dateAdded>2010-05-03T14:45:00 </dateAdded> <comment>Reserved below vanity URL's</comments> </VanityUrl> 一切都还可以,但我无法使用评论部分,如何根据相关评论添加评论元素.我的意思是我的xslt下面的代码不能正常工作,它只添加第一条评论,即新闻映射 xsl:if test="preceding-sibling::comment()"> <comments> <xsl:value-of select="preceding-sibling::comment()" /> </comments> </xsl:if>
preceding-sibling :: comment()以反向文档顺序为您提供当前级别上所有前面注释节点的节点集.但是,您需要选择最接近的注释才能使其正常工作:
<xsl:if test="preceding-sibling::comment()[1]"> <comments> <xsl:value-of select="preceding-sibling::comment()[1]" /> </comments> </xsl:if> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |