加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用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&amp;pub=/english&amp;section=IBE&amp;j=f"/>
    <mapping old="about/news" new="about/news/news.aspx"/>
    <!-- CUGO's-->
    <mapping old="/nhs" new="/cugo.aspx?promoCode=UKNHS01&amp;pub=/uk/english"/>
    <mapping old="/hk/ukstudentfare" new="/cugo.aspx?promoCode=HKSTU10&amp;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&amp;pub=/english&amp;section=IBE&amp;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&amp;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&amp;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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读