需要一些使用XSLT 1.0转换XML的帮助



关于平面文件模式的XSLT转换需要一些帮助。是否有可能将Record节点的直接子节点组合为包含Record节点的子节点?子512是必需的,最小和最大出现次数为1,标志着新的Record节点的开始。

输入:

<ns0:Root xmlns="">
    <Header>
        <node01>AA</node01>
        <node02>123</node02>
    </Header>
    <Record>
        <512>
            <node01>BB</node01>
            <node02>123</node02>
        </512>
    </Record>
    <Record>
        <513>
            <node01>CC</node01>
            <node02>123</node02>
        </513>
    </Record>
    <Record>
        <512>
            <node01>DD</node01>
            <node02>123</node02>
        </512>
    </Record>
    <Record>
        <515>
            <node01>JJ</node01>
            <node02>123</node02>
        </515>
    </Record>
    <Record>
        <512>
            <node01>EE</node01>
            <node02>123</node02>
        </512>
    </Record>
    <Record>
        <513>
            <node01>FF</node01>
            <node02>123</node02>
        </513>
    </Record>
    <Record>
        <514>
            <node01>GG</node01>
            <node02>123</node02>
        </514>
        <514>
            <node01>HH</node01>
            <node02>123</node02>
        </514>
    </Record>
    <Footer>
        <node01>II</node01>
        <node02>123</node02>
    </Footer>
</ns0:Root>
所需输出:

<ns0:Root xmlns="">
    <Header>
        <item01>AA</item01>
        <item02>123</item02>
    </Header>
    <Record>
        <512>
            <item01>BB</item01>
            <item02>123</item02>
        </512>
        <513>
            <item01>CC</item01>
            <item02>123</item02>
        </513>
    </Record>
    <Record>
        <512>
            <item01>DD</item01>
            <item02>123</item02>
        </512>
        <515>
            <item01>JJ</item01>
            <item02>123</item02>
        </515>
    </Record>
    <Record>
        <512>
            <item01>EE</item01>
            <item02>123</item02>
        </512>
        <513>
            <item01>FF</item01>
            <item02>123</item02>
        </513>
        <514>
            <item01>GG</item01>
            <item02>123</item02>
        </514>
        <514>
            <item01>HH</item01>
            <item02>123</item02>
        </514>
    </Record>
    <Footer>
        <item01>II</item01>
        <item02>123</item02>
    </Footer>
</ns0:Root>

谢谢你,并致以亲切的问候菲利普

注:: XSLT 2.0不可用。

这不是合法的XML(元素名称不能以数字开头),但是假设您将所有无效元素重命名为以"r"开头,您可以做以下操作:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*" />
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
  <xsl:template match="Record[r512]">
    <xsl:copy>
      <xsl:apply-templates select="." mode="iterate" />
    </xsl:copy>
  </xsl:template>
  <xsl:template match="Record" />
  <xsl:template match="Record" mode="iterate">
    <xsl:apply-templates />
    <xsl:apply-templates select="following-sibling::Record[1][not(r512)]"
                         mode="iterate"/>
  </xsl:template>
</xsl:stylesheet>

当在这个输入上运行时:

<ns0:Root xmlns="" xmlns:ns0="nsss">
  <Header>
    <node01>AA</node01>
    <node02>123</node02>
  </Header>
  <Record>
    <r512>
      <node01>BB</node01>
      <node02>123</node02>
    </r512>
  </Record>
  <Record>
    <r513>
      <node01>CC</node01>
      <node02>123</node02>
    </r513>
  </Record>
  <Record>
    <r512>
      <node01>DD</node01>
      <node02>123</node02>
    </r512>
  </Record>
  <Record>
    <r515>
      <node01>JJ</node01>
      <node02>123</node02>
    </r515>
  </Record>
  <Record>
    <r512>
      <node01>EE</node01>
      <node02>123</node02>
    </r512>
  </Record>
  <Record>
    <r513>
      <node01>FF</node01>
      <node02>123</node02>
    </r513>
  </Record>
  <Record>
    <r514>
      <node01>GG</node01>
      <node02>123</node02>
    </r514>
    <r514>
      <node01>HH</node01>
      <node02>123</node02>
    </r514>
  </Record>
  <Footer>
    <node01>II</node01>
    <node02>123</node02>
  </Footer>
</ns0:Root>

生产:

<ns0:Root xmlns:ns0="nsss">
  <Header>
    <node01>AA</node01>
    <node02>123</node02>
  </Header>
  <Record>
    <r512>
      <node01>BB</node01>
      <node02>123</node02>
    </r512>
    <r513>
      <node01>CC</node01>
      <node02>123</node02>
    </r513>
  </Record>
  <Record>
    <r512>
      <node01>DD</node01>
      <node02>123</node02>
    </r512>
    <r515>
      <node01>JJ</node01>
      <node02>123</node02>
    </r515>
  </Record>
  <Record>
    <r512>
      <node01>EE</node01>
      <node02>123</node02>
    </r512>
    <r513>
      <node01>FF</node01>
      <node02>123</node02>
    </r513>
    <r514>
      <node01>GG</node01>
      <node02>123</node02>
    </r514>
    <r514>
      <node01>HH</node01>
      <node02>123</node02>
    </r514>
  </Record>
  <Footer>
    <node01>II</node01>
    <node02>123</node02>
  </Footer>
</ns0:Root>

相关内容

  • 没有找到相关文章

最新更新