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

xml – 使用XSLT将分隔符转换为包装器

发布时间:2020-12-16 23:50:09 所属栏目:百科 来源:网络整理
导读:我有一块 XML要用XSLT转换(使用xsltproc – 所以只有XSLT 1.0).原始XML使用一些标记作为分隔符,如下所示: container element / element / separator / element / element / element / separator / element //container 我需要将其转换为包含这些元素的格式.
我有一块 XML要用XSLT转换(使用xsltproc – 所以只有XSLT 1.0).原始XML使用一些标记作为分隔符,如下所示:
<container>
  <element />
  <element />
  <separator />
  <element />
  <element />
  <element />
  <separator />
  <element />
</container>

我需要将其转换为包含这些元素的格式.所以我需要它看起来像这样:

<container>
  <wrapper>
    <element />
    <element />
  </wrapper>
  <wrapper>
    <element />
    <element />
    <element />
  </wrapper>
  <wrapper>
    <element />
  </wrapper>
</container>

我似乎无法设计一个实现这一目标的模板.有人有什么想法吗?

这种转变:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:key name="kFollowing" match="element"
          use="generate-id(preceding-sibling::separator[1])"/>

 <xsl:template match="/*">
     <container>
       <xsl:apply-templates select=
       "element
            [generate-id()
            =
             generate-id(key('kFollowing',generate-id(preceding-sibling::separator[1])
                             )[1]
                        )
             ]"/>
     </container>
 </xsl:template>

 <xsl:template match="element">
  <wrapper>
    <xsl:copy-of select=
    "key('kFollowing',generate-id(preceding-sibling::separator[1])
         )"/>
  </wrapper>
 </xsl:template>
</xsl:stylesheet>

当应用于提供的XML文档时:

<container>
    <element />
    <element />
    <separator />
    <element />
    <element />
    <element />
    <separator />
    <element />
</container>

产生想要的,正确的结果:

<container>
   <wrapper>
      <element/>
      <element/>
   </wrapper>
   <wrapper>
      <element/>
      <element/>
      <element/>
   </wrapper>
   <wrapper>
      <element/>
   </wrapper>
</container>

(编辑:李大同)

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

    推荐文章
      热点阅读