2017-09-22 51 views
1

我有一個Spa服務列表,我需要通過XSLT 1.0通過分組來分解它們。我可以通過分組來分解名字,但是可以與我的分組進行拼接。如果你運行我的腳本,你會看到我的第一個Muenchian團隊工作正常,明確地將客人姓名,但不知道爲什麼我的第二個連接的鍵不工作(日期)。任何人都可以指出我正確的方向嗎?我對XSLT不太熟練,但我喜歡嘗試!XSLT:Muenchian多個分組的困境

簡化輸入

<SQLXMLExport> 
 
<Rows> 
 
<Row> 
 
<Field alias="BOOK_FOR">Phone, Angie</Field> 
 
<Field alias="START_DATE">Tuesday, December 5, 2017</Field> 
 
<Field alias="ITEM_NAME">Sea Soak</Field> 
 
</Row> 
 
<Row> 
 
<Field alias="BOOK_FOR">Phone, Angie</Field> 
 
<Field alias="START_DATE">Tuesday, December 5, 2017</Field> 
 
<Field alias="ITEM_NAME">Ocean Package - Weekday</Field> 
 
</Row> 
 
<Row> 
 
<Field alias="BOOK_FOR">McNotes, Sue</Field> 
 
<Field alias="START_DATE">Tuesday, December 5, 2017</Field> 
 
<Field alias="ITEM_NAME">Experience Package - Weekday</Field> 
 
</Row> 
 
<Row> 
 
<Field alias="BOOK_FOR">McNotes, Sue</Field> 
 
<Field alias="START_DATE">Tuesday, December 5, 2017</Field> 
 
<Field alias="ITEM_NAME">Morning Soak - Weekday</Field> 
 
</Row> 
 
<Row> 
 
<Field alias="BOOK_FOR">McNotes, Sue</Field> 
 
<Field alias="START_DATE">Wednesday, December 6, 2017</Field> 
 
<Field alias="ITEM_NAME">Test Scrub - Weekday</Field> 
 
</Row> 
 
</Rows> 
 
</SQLXMLExport>

我的XSLT 1.0

<?xml version="1.0" encoding="utf-8"?> 
 
<xsl:stylesheet version="1.0" 
 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
 
    <xsl:output method="html"/> 
 
    <xsl:key name="guests" match="Rows/Row" use="./Field[@alias='BOOK_FOR']"/> 
 
    <xsl:key name="guests-date" match="Rows/Row" use="concat(./Field[@alias='BOOK_FOR'] , '|' , ./Field[@alias='START_DATE'])"/> 
 
     
 
    <xsl:template match="Rows"> 
 
     <!-- Now, we need to iterate on the guest key --> 
 
     <xsl:for-each select="Row[count(. | key('guests', ./Field[@alias='BOOK_FOR'])[1]) = 1]"> 
 
      <!-- Sort by the guest --> 
 
      <xsl:sort select="./Field[@alias='BOOK_FOR']" /> 
 
      <br/><xsl:value-of select="./Field[@alias='BOOK_FOR']" /> 
 
      <hr /> 
 

 
      <!-- Now loop on the items of this guest, we get them from the key we defined --> 
 
      <xsl:for-each select="Row[count(. | key('guests-date' , concat(./Field[@alias='BOOK_FOR'] , '|' , ./Field[@alias='START_DATE']))[1]) = 1]"> 
 
       <!-- Sort by the start date --> 
 
       <!-- year --> 
 
       <xsl:sort select="substring-after(substring-after(./Field[@alias='START_DATE'],','), ',')" order="ascending" data-type="number" /> 
 
       <!-- day --> 
 
       <xsl:sort select="substring-after(substring-after(substring-before(substring-after(./Field[@alias='START_DATE'],','), ','), ' '), ' ')" order="ascending" data-type="number" /> 
 
       <!-- month...this is a mess, tackle later 
 
       <xsl:sort select="substring-before(substring-after(./Field[@alias='START_DATE'],','), ' ')" order="ascending" data-type="number" /> 
 
       --> 
 
       <xsl:value-of select="./Field[@alias='START_DATE']" /><br/>   
 
       <xsl:value-of select="./Field[@alias='ITEM_NAME']" /><br/> 
 
      </xsl:for-each> 
 
      <br /> 
 
     </xsl:for-each> 
 
    </xsl:template> 
 
     
 
</xsl:stylesheet>

所需的輸出

我希望得到它,名字是第一次,然後在每一個名字都是他們未來的日子裏,他們的服務每一個相應的日期下。就像下面這個例子:

McNotes, Sue 
 
<hr> 
 
<b>Tuesday, December 5, 2017</b><br> 
 
Experience Package - Weekday<br> 
 
Morning Soak - Weekday<br> 
 
<b>Wednesday, December 6, 2017</b> 
 
Test Scrub - Weekday<br> 
 

 
Phone, Angie 
 
<hr> 
 
<b>Tuesday, December 5, 2017</b><br> 
 
Sea Soak<br> 
 
Ocean Package - Weekday<br>

回答

1

更改此:

<xsl:for-each select="Row[count(. | key('guests-date' , concat(./Field[@alias='BOOK_FOR'] , '|' , ./Field[@alias='START_DATE']))[1]) = 1]"> 

到:

<xsl:for-each select="../Row[count(. | key('guests-date' , concat(./Field[@alias='BOOK_FOR'] , '|' , ./Field[@alias='START_DATE']))[1]) = 1]"> 

Explan ation

您處於的環境中;您需要到父母Rows以選擇同一組中的兄弟姐妹。