2016-04-15 44 views
0

我有以下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> 

,我想其中的文字與doubledot結束的每個節點上的組,這樣的結果會變成類似下面:

<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)?

回答

1

我認爲使用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> 

效率是你必須測量每個實現。

相關問題