【问题标题】:XSL Rewrite a straight xml structure to nested xmlXSL 将直接的 xml 结构重写为嵌套的 xml
【发布时间】:2013-05-10 04:38:59
【问题描述】:

我有一个类似的 XML 结构:

<TOP>top</TOP>
<HDR>header</HDR>
<LINE>line1</LINE>
<LINE>line2</LINE>
<LINE>line3</LINE>
<HDR>header</HDR>
<LINE>line4</LINE>
<LINE>line5</LINE>
<LINE>line6</LINE>

我想要一个 XLST 脚本将其传输到:

<TOP>top</TOP>
<HDR>
header
<LINE>line1</LINE>
<LINE>line2</LINE>
<LINE>line3</LINE>
</HDR>
<HDR>
header
<LINE>line4</LINE>
<LINE>line5</LINE>
<LINE>line6</LINE>
</HDR>

因此:<HDR>-tag 围绕 LINES 直到下一个 <HDR>-tag

谁能帮帮我,请给我一个xslt-script。

【问题讨论】:

标签: xml xslt foreach tags


【解决方案1】:

这种转变:

<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="LINE"
          use="generate-id(preceding-sibling::HDR[1])"/>

 <xsl:template match="/*">
   <xsl:copy-of select="TOP"/>
   <xsl:apply-templates select="HDR"/>
 </xsl:template>

 <xsl:template match="HDR">
  <HDR>
    <xsl:copy-of select="key('kFollowing', generate-id())"/>
  </HDR>
 </xsl:template>
</xsl:stylesheet>

应用于以下 XML 文档时(提供的片段,包装在单个顶部元素中):

<t>
    <TOP>top</TOP>
    <HDR>header</HDR>
    <LINE>line1</LINE>
    <LINE>line2</LINE>
    <LINE>line3</LINE>
    <HDR>header</HDR>
    <LINE>line4</LINE>
    <LINE>line5</LINE>
    <LINE>line6</LINE>
</t>

产生想要的正确结果:

<TOP>top</TOP>
<HDR>
   <LINE>line1</LINE>
   <LINE>line2</LINE>
   <LINE>line3</LINE>
</HDR>
<HDR>
   <LINE>line4</LINE>
   <LINE>line5</LINE>
   <LINE>line6</LINE>
</HDR>

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多