是否可以在此XML中按句点分组?

时间:2012-11-26 16:43:59

标签: xslt-2.0 xslt-grouping

我想在以下XML上强加一些结构:

<phr>ΦP
    <i>το αθάνατο</i> ~.
    <i>ήπιε το αμίλητο</i> ~.
    <i>πίνω</i> ~ <i>στο όνομα κάποιου</i>, τον σέβομαι, τον εκτιμώ, αναγνωρίζοντας τα όσα του οφείλω.
    <i>λέω το</i> ~ <i>νεράκι</i>, για μεγάλη έλλειψη νερού.
</phr>

通过将句号的内容分组为分隔符,如:

<phr>
    <group>ΦP <i>το αθάνατο</i> ~.</group>
    <group>  <i>ήπιε το αμίλητο</i> ~.</group>
    <group>  <i>πίνω</i> ~ <i>στο όνομα κάποιου</i>, τον σέβομαι, τον εκτιμώ, αναγνωρίζοντας τα όσα <group>του οφείλω.</group>
    <group><i>λέω το</i> ~ <i>νεράκι</i>, για μεγάλη έλλειψη νερού.</group>
</phr>

有人可以推荐一些XSLT(2.0)来实现这个目标吗?我已经尝试了每个组 - 由'text()[匹配(。,'。')]',但这不会产生预期的结果。

非常感谢!

1 个答案:

答案 0 :(得分:0)

此样式表应该满足您的需求:

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="xs"
  version="2.0">

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

  <xsl:template match="phr">
    <xsl:copy>
      <xsl:for-each-group select="node()" group-ending-with="text()[contains(.,'.')]">
        <group>
          <xsl:apply-templates select="current-group()"/>
        </group>
      </xsl:for-each-group>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>