【问题标题】:Nesting nodes in xsltxslt 中的嵌套节点
【发布时间】:2013-01-26 15:35:43
【问题描述】:

我正在尝试创建一个 XSLT 来转换 XML 文档,但是我在分组时遇到了问题。我可以毫无问题地提取单个对象的信息,但我不知道如何使用 xslt 对某些元素进行分组。我尝试过 xsl:for-each-group 和 xsl:key 进行分组,但我没有成功转换。

输入:

<?xml version="1.0" standalone="yes"?>
<root>
    <node1>
        <ID>2</ID>
        <Name>ABCDE</Name>
        <Age>21</Age>
        <Skills>C++ C#</Skills>
        <worklocation>IN</worklocation>
        <designaton>Engineer I</designaton>
    </node1>
    <node2>
        <ID>3</ID>
        <Name>EFGH</Name>
        <Age>12</Age>
        <Skills>java</Skills>
        <worklocation>USA</worklocation>
        <designaton>Engineer II</designaton>
    </node2>
</root>

期望的输出:

<root>
    <node1>
        <ID>2</ID>
        <Name>ABCDE</Name>
        <Age>21</Age>
        <workInfo>
            <Skills>C++ C#</Skills>
            <worklocation>IN</worklocation>
            <designaton>Engineer I</designaton>
        </workInfo>
    </node1>
    <node2>
        <ID>3</ID>
        <Name>EFGH</Name>
        <Age>12</Age>
        <workInfo>
            <Skills>java</Skills>
            <worklocation>USA</worklocation>
            <designaton>Engineer II</designaton>
        </workInfo>
    </node2>
</root>

【问题讨论】:

  • 从您的示例输出来看,您似乎并不是真的在谈论 分组(分组涉及将几个具有共同价值的项目放在一起),而只是放置几个另一个节点内的节点。对吗?
  • @JLRishe:正确。抱歉,我是 xsl 的新手
  • 不用担心。 :) 看起来缩放为您提供了一个很好的解决方案。

标签: xml xslt nested


【解决方案1】:

使用 identity 模板:见W3C recommandation

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

然后应用与root 节点的每个子节点匹配的特定模板,并将动态创建workInfo 节点。

<xsl:template match="/root/*">
  <xsl:apply-templates select="ID|Name|Age" />
  <workInfo>
    <xsl:apply-templates select="Skills|worklocation|designaton" />
  </workInfo>
</xsl:template>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    相关资源
    最近更新 更多