XML / XSL 段落元素嵌套问题
XML / XSL Paragraph Elements Nesting Issue
我正在尝试使用此 XML 和 XSL 实现以下输出,尽管我的 XSL 无效,因为段落元素未正确嵌套。我该如何克服这个问题?
XML
<Phrases>
<Phrase>
<FullText>Lorem ipsum dolor sit amet.</FullText>
</Phrase>
<Phrase>
<FullText>Consectetur adipiscing elit.</FullText>
<NewLine/>
</Phrase>
<Phrase>
<FullText>Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</FullText>
</Phrase>
<Phrase>
<FullText>Ut enim ad minim veniam.</FullText>
</Phrase>
</Phrases>
XSL
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:call-template name="Phrase">
<xsl:with-param name="Phrases" select="Phrases"/>
</xsl:call-template>
<!-- Phrase -->
<xsl:template name="Phrase">
<xsl:param name="Phrases"/>
<p>
<xsl:for-each select="$Phrases">
<xsl:value-of select="FullText"/>
<xsl:if test="position() != last() and not(NewLine)">
 
</xsl:if>
<xsl:if test="position() != last() and NewLine">
</p><p>
</xsl:if>
</xsl:for-each>
</p>
</xsl:template>
</xsl:stylesheet>
预期输出
<p>Lorem ipsum dolor sit amet. Consectetur adipiscing elit.</p>
<p>Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</p>
使用 XSLT 2 或 3,您可以使用
<xsl:template match="Phrases">
<xsl:for-each-group select="Phrase" group-ending-with="Phrase[NewLine]">
<p>
<xsl:value-of select="current-group()/FullText" separator=" "/>
</p>
</xsl:for-each-group>
</xsl:template>
我正在尝试使用此 XML 和 XSL 实现以下输出,尽管我的 XSL 无效,因为段落元素未正确嵌套。我该如何克服这个问题?
XML
<Phrases>
<Phrase>
<FullText>Lorem ipsum dolor sit amet.</FullText>
</Phrase>
<Phrase>
<FullText>Consectetur adipiscing elit.</FullText>
<NewLine/>
</Phrase>
<Phrase>
<FullText>Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</FullText>
</Phrase>
<Phrase>
<FullText>Ut enim ad minim veniam.</FullText>
</Phrase>
</Phrases>
XSL
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:call-template name="Phrase">
<xsl:with-param name="Phrases" select="Phrases"/>
</xsl:call-template>
<!-- Phrase -->
<xsl:template name="Phrase">
<xsl:param name="Phrases"/>
<p>
<xsl:for-each select="$Phrases">
<xsl:value-of select="FullText"/>
<xsl:if test="position() != last() and not(NewLine)">
 
</xsl:if>
<xsl:if test="position() != last() and NewLine">
</p><p>
</xsl:if>
</xsl:for-each>
</p>
</xsl:template>
</xsl:stylesheet>
预期输出
<p>Lorem ipsum dolor sit amet. Consectetur adipiscing elit.</p>
<p>Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</p>
使用 XSLT 2 或 3,您可以使用
<xsl:template match="Phrases">
<xsl:for-each-group select="Phrase" group-ending-with="Phrase[NewLine]">
<p>
<xsl:value-of select="current-group()/FullText" separator=" "/>
</p>
</xsl:for-each-group>
</xsl:template>