使用xsl将标记移动到组中

时间:2013-06-25 06:55:09

标签: xslt structure

我有以下xml片段:

<headline>Head1</headline>
<text>Text1</text>
<image>Dummy</image>
<headline>Head2</headline>
<text>Text2</text>
<preview>Abc</preview>

此片段应转换为:

<paragraph>
  <headline>Head1</headline>
  <text>Text1</text>
  <image>Dummy</image>
</paragraph>
<paragraph>
  <headline>Head2</headline>
  <text>Text2</text>
  <preview>Abc</preview>
</paragraph>

因此,两个标题标签之间的所有标签都应合并为一个段落标签。

可以请任何人给我一个提示。我不知道如何使用XSL完成这样的事情。

1 个答案:

答案 0 :(得分:1)

使用xslt-1.0,我尝试这样的事情(改编https://stackoverflow.com/a/16577804/2115381):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:key name="kfHeadline" match="*[local-name() != 'headline']"
         use="generate-id(preceding-sibling::headline[1])"/>

    <xsl:template match="/*">
        <out>
        <xsl:apply-templates select="headline"/>
        </out>
    </xsl:template>

    <xsl:template match="headline">
        <paragraph>
            <xsl:copy-of select="."/>
            <xsl:copy-of select="key('kfHeadline', generate-id())"/>
        </paragraph>
    </xsl:template>
</xsl:stylesheet>

将生成以下输出:

<out>
  <paragraph>
    <headline>Head1</headline>
    <text>Text1</text>
    <image>Dummy</image>
    <headline>Head2</headline>
  </paragraph>
  <paragraph>
    <headline>Head2</headline>
    <text>Text2</text>
    <preview>Abc</preview>
  </paragraph>
</out>