【问题标题】:flat xml to hierarchical xml using xslt使用 xslt 将平面 xml 转换为分层 xml
【发布时间】:2020-10-25 18:27:35
【问题描述】:

尝试创建一个转换,将带有父/子 ID 的平面 xml 映射到层次结构中。 我在下面包含了一个简单的请求和响应示例。任何帮助将非常感激!谢谢!

输入xml:

<?xml version="1.0" encoding="UTF-8"?>
<Rowset>
    <Row>
        <id>5</id>
        <header>grouptile1</header>
        <parentid>NULL</parentid>
    </Row>
    <Row>
        <id>1</id>
        <header>Grp1 HeaderTile 1-1</header>
        <subheader>Grp1 HeaderTile 1-1</subheader>
        <parentid>5</parentid>
    </Row>
    <Row>
        <id>2</id>
        <header>Grp1 HeaderTile 2-1</header>
        <subheader>Grp1 HeaderTile 2-1</subheader>
        <parentid>5</parentid>
    </Row>
    <Row>
        <id>6</id>
        <header>grouptile2</header>
        <parentid>NULL</parentid>
    </Row>
    <Row>
        <id>3</id>
        <header>Grp1 HeaderTile 2-1</header>
        <subheader>Grp1 HeaderTile 2-1</subheader>
        <parentid>6</parentid>
    </Row>
    <Row>
        <id>4</id>
        <header>Grp1 HeaderTile 2-2</header>
        <subheader>Grp1 HeaderTile 2-2</subheader>
        <parentid>6</parentid>
    </Row>
</Rowset>

转换为输出 xml:

<?xml version="1.0" encoding="UTF-8"?>
<tiles>
  <grouptile>
    <id>5</id>
    <header>grouptile1</header>
    <tile>
        <id>1</id>
        <header>Grp1 HeaderTile 1-1</header>
        <subheader>Grp1 HeaderTile 1-1</subheader>
    </tile>
    <tile>
        <id>2</id>
        <header>Grp1 HeaderTile 2-1</header>
        <subheader>Grp1 HeaderTile 2-1</subheader>
    </tile>
  </grouptile>
  <grouptile>
    <id>6</id>
    <header>grouptile2</header>
    <tile>
        <id>3</id>
        <header>Grp1 HeaderTile 2-1</header>
        <subheader>Grp1 HeaderTile 2-1</subheader>
    </tile>
    <tile>
        <id>4</id>
        <header>Grp1 HeaderTile 2-2</header>
        <subheader>Grp1 HeaderTile 2-2</subheader>
    </tile>
  </grouptile>
</tiles>

xslt 是什么?

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    如果你只有父母和孩子,你可以这样做:

    XSLT 1.0

    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    
    <xsl:key name="children" match="Row" use="parentid"/>
    
    <xsl:template match="/Rowset">
        <tiles>
            <xsl:for-each select="Row[parentid='NULL']">
                <grouptile>
                    <xsl:copy-of select="id | header"/>
                    <xsl:for-each select="key('children', id)">
                        <tile>
                            <xsl:copy-of select="id | header | subheader"/>
                        </tile>             
                    </xsl:for-each>
                </grouptile>
            </xsl:for-each>
        </tiles>
    </xsl:template>
    
    </xsl:stylesheet>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      相关资源
      最近更新 更多