XSL对analyze-string的输出进行排序

时间:2014-03-04 23:01:53

标签: xslt-2.0

在源XML中,我获得了一串键:value:extra sets。结构中存在一些不一致,因此我使用正则表达式将字符串解析为xml序列,如下所示:

 <Sets>
    <Set>
      <key/>
      <value/>
      <extra/>
    </Set>
    <Set>...
    <Set>...
 </Sets>

那部分工作正常,但我也要对<Sets>进行排序。由于xsl:matching-substring一次只给我一场比赛,我很难理解如何最好地接近这一点。是否可以从xsl:analyze-string获得整个匹配序列?这可能有所帮助。

另一种想法是创建每个匹配的树片段,然后对其进行排序。关于如何进行的任何指示?

1 个答案:

答案 0 :(得分:1)

我会这样做。

<xsl:variable name="unsorted">
 <Sets>
   <xsl:analyze-string select="..." regex="...">
    <xsl:matching-substring>
      <Set>
        <key><xsl:value-of select="regex-group(1)"/></key>
        <value>...</value>
        <extra>...</extra>
      </Set>
    </xsl:matching-substring>
 </Sets>
<xsl:variable>

<xsl:variable name="sorted">
  <xsl:perform-sort select="$unsorted/Sets/Set">
    <xsl:sort select="key"/>
  </xsl:perform-sort>
</xsl:variable>

当然上面的xsl:matching-substring的内容只是作为一个例子。