用于摆脱嵌套子节点的XSLT脚本

时间:2013-05-30 15:20:16

标签: xml xslt xpath

输入XML:

<tree>
  <node name="GrandParent">
    <node name="Parent1">
      <qualifier>Fat</qualifier>
    </node>
    <node name="Parent2">
      <qualifier>Slim</qualifier>
      <node name="Child1">
        <qualifier>Tall</qualifier>
      </node>
      <node name="Child2">
        <qualifier>Short</qualifier>
      </node>
    </node>
  </node>
</tree>

必需的输出:

<tree>
  <node name="GrandParent-Parent1">
    <qualifier>Fat</qualifier>
  </node>
  <node name="GrandParent-Parent2">
    <qualifier>Slim</qualifier>
  </node>
  <node name="GrandParent-Parent2-Child1">
    <qualifier>Tall</qualifier>
  </node>
  <node name="GrandParent-Parent2-Child2">
    <qualifier>Short</qualifier>
  </node>
</tree>

我想获得一个优化的XSLT脚本来实现相同的目标。请帮帮我。

(注意:给出的输入只是一个示例。子节点可以嵌套到任何深度。)

1 个答案:

答案 0 :(得分:2)

以下是一些指示您正确方向的提示:

  • 了解<xsl:template><xsl:apply-templates>说明;他们将成为这个问题解决方案的支柱。
  • 了解`concat()'函数。这将有助于您希望进行的命名方案更改。
  • 熟悉XPath轴(尤其是parent::*ancestor::*以及../../../等相对XPath。

此外,请查看此问题(以及后续答案) - 它在您的方案中也可能有用:Merge successive descendant nodes into one

听起来你明天会有一个艰难的截止日期,但是我会建议花点时间在XSLT / XPath上阅读好材料。你可以在这里找到几个:https://stackoverflow.com/questions/339930/any-good-xslt-tutorial-book-blog-site-online/341589#341589