如何使用文本内容进行分组?
How to group using text content?
我关注xml :
<note>
<para>customer name :</para>
<para>mr. Joe Someone</para>
<para>calling from :</para>
<para>1234567</para>
<para>device model :</para>
<para>ABC-123</para>
<para>issue:</para>
<para>some info</para>
<para>some more info</para>
<para>and even more info</para>
<para>solution :</para>
<para>some solutions</para>
<para>and some more solutions</para>
</note>
并且我想在文本以双点结尾的每个节点上进行分组,因此结果将如下所示:
<note>
<para>customer name :</para>
<groupdata>
<para>mr. Joe Someone</para>
</groupdata>
<para>calling from :</para>
<groupdata>
<para>1234567</para>
</groupdata>
<para>device model :</para>
<groupdata>
<para>ABC-123</para>
</groupdata>
<para>issue:</para>
<groupdata>
<para>some info</para>
<para>some more info</para>
<para>and even more info</para>
</groupdata>
<para>solution :</para>
<groupdata>
<para>some solutions</para>
<para>and some more solutions</para>
</groupdata>
</note>
最有效的方法是什么(使用 xslt 2.0)?
我认为使用 xsl:for-each-group select="*" group-starting-with="*[ends-with(., ':')]"
很简单:
<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">
<xsl:output indent="yes"/>
<xsl:template match="note">
<xsl:copy>
<xsl:for-each-group select="*" group-starting-with="*[ends-with(., ':')]">
<xsl:copy-of select="."/>
<groupdata>
<xsl:copy-of select="current-group() except ."/>
</groupdata>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
效率是您必须为每个实施衡量的东西。
我关注xml :
<note>
<para>customer name :</para>
<para>mr. Joe Someone</para>
<para>calling from :</para>
<para>1234567</para>
<para>device model :</para>
<para>ABC-123</para>
<para>issue:</para>
<para>some info</para>
<para>some more info</para>
<para>and even more info</para>
<para>solution :</para>
<para>some solutions</para>
<para>and some more solutions</para>
</note>
并且我想在文本以双点结尾的每个节点上进行分组,因此结果将如下所示:
<note>
<para>customer name :</para>
<groupdata>
<para>mr. Joe Someone</para>
</groupdata>
<para>calling from :</para>
<groupdata>
<para>1234567</para>
</groupdata>
<para>device model :</para>
<groupdata>
<para>ABC-123</para>
</groupdata>
<para>issue:</para>
<groupdata>
<para>some info</para>
<para>some more info</para>
<para>and even more info</para>
</groupdata>
<para>solution :</para>
<groupdata>
<para>some solutions</para>
<para>and some more solutions</para>
</groupdata>
</note>
最有效的方法是什么(使用 xslt 2.0)?
我认为使用 xsl:for-each-group select="*" group-starting-with="*[ends-with(., ':')]"
很简单:
<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">
<xsl:output indent="yes"/>
<xsl:template match="note">
<xsl:copy>
<xsl:for-each-group select="*" group-starting-with="*[ends-with(., ':')]">
<xsl:copy-of select="."/>
<groupdata>
<xsl:copy-of select="current-group() except ."/>
</groupdata>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
效率是您必须为每个实施衡量的东西。