0

我有以下 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 完成类似的事情。

4

1 回答 1

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>
于 2013-06-25T07:37:17.983 回答