我有以下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完成这样的事情。
答案 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>