2016-11-25 5 views
0

У меня есть проблема, выясняя эту группировку в XSLT:Группировка в XSLT 2.0 (группировка по тексту)

Исходная информация:

<Application> 

    <ApplicationItem LayoutPath="Attachments.Package.Attachment[bfd0b74d-2888-49d9-a986-df807f08ad8a].UniqueID" Value="bfd0b74d-2888-49d9-a986-df807f08ad8a" /> 
    <ApplicationItem LayoutPath="Attachments.Package.Attachment[bfd0b74d-2888-49d9-a986-df807f08ad8a].Filename" Value="Document 1 Test" /> 
    <ApplicationItem LayoutPath="Attachments.Package.Attachment[bfd0b74d-2888-49d9-a986-df807f08ad8a].URI" Value="https/.test.pdf" /> 

    <ApplicationItem LayoutPath="Attachments.Package.Attachment[bfd0b74d-2888-49d9-a986-df807f08ad8b].UniqueID" Value="bfd0b74d-2888-49d9-a986-df807f08ad8b" /> 
    <ApplicationItem LayoutPath="Attachments.Package.Attachment[bfd0b74d-2888-49d9-a986-df807f08ad8b].Filename" Value="Document 2 Test" /> 
    <ApplicationItem LayoutPath="Attachments.Package.Attachment[bfd0b74d-2888-49d9-a986-df807f08ad8b].URI" Value="google.com" /> 

</Application> 

Ожидаемый результат:

<Package> 
    <Attachment UniqueID="bfd0b74d-2888-49d9-a986-df807f08ad8a" 
     Filename="Document 1 Test" 
     URI="https/.test.pdf"/> 
    <Attachment UniqueID="bfd0b74d-2888-49d9-a986-df807f08ad8b" 
     Filename="Document 2 Test" 
     URI="google.com"/> 
<Package> 

Мои код: Я сделал группировку, используя идентификатор из квадратных скобок.

<xsl:for-each-group select="ApplicationItem[contains(@LayoutPath,'Attachments.Package.Attachment')]" group-by="substring-before(substring-after(@LayoutPath, 'Attachments.Package.Attachment['), ']')"> 
      <Attachment> 
       <xsl:for-each select="current-group()"> 
        <xsl:attribute name="UniqueID" select="current-grouping-key()"/> 
        <xsl:attribute name="Filename" select=".[contains(@LayoutPath,'Filename')]/@Value"/> 
        <xsl:attribute name="URI" select=".[contains(@LayoutPath,'URI')]/@Value"/> 
       </xsl:for-each> 
      <Attachment> 
</xsl:for-each-group> 

Мои результаты:

<Package> 
    <Attachment UniqueID="bfd0b74d-2888-49d9-a986-df807f08ad8a" 
     Filename="" 
     URI="https/.test.pdf"/> 
    <Attachment UniqueID="bfd0b74d-2888-49d9-a986-df807f08ad8b" 
     Filename="" 
     URI="google.com"/> 
<Package> 

Что мне нужно изменить в коде, чтобы использовать группировку, потому что на данный момент не работает, принимая только последний ApplicationItem с уникальным @LayoutPath. Я думаю, проблема связана с группировкой, но не сейчас, как ее исправить.

ответ

1

Удалить <xsl:for-each select="current-group()"> и изменить

   <xsl:attribute name="Filename" select=".[contains(@LayoutPath,'Filename')]/@Value"/> 
       <xsl:attribute name="URI" select=".[contains(@LayoutPath,'URI')]/@Value"/> 

в

   <xsl:attribute name="Filename" select="current-group()[contains(@LayoutPath,'Filename')]/@Value"/> 
       <xsl:attribute name="URI" select="current-group()[contains(@LayoutPath,'URI')]/@Value"/> 
+0

Спасибо, что работает. – DanielCSD