2011-02-14 3 views
0

Je tente de créer un fichier XML à partir d'un rapport SSRS.Transformation XSLT à partir du rapport SSRS - résultats du groupe

Je suis un problème avec les éléments suivants:

<xsl:template match="AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events[Invalid_Reason_Formated='Emergency Record: will be removed from waitlist'] | 
        AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events[Invalid_Reason_Formated='Entry Error: will be removed from waitlist'] | 
        AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events[Invalid_Reason_Formated='Entry Error or Emergency Record: will be removed from waitlist']"> 
     <AWL_KeyDel_Events> 
       <xsl:apply-templates/> 
     </AWL_KeyDel_Events> 
    </xsl:template> 

Ma sortie en est (mon échantillon a des dossiers qui répondent à deux des critères ci-dessus):

<AWL_KeyDel_Events> 
    <Event_Key>101</Event_Key> 
    <Event_Key>102</Event_Key> 
    <Event_Key>103</Event_Key> 
</AWL_KeyDel_Events> 
<AWL_KeyDel_Events> 
    <Event_Key>99</Event_Key> 
    <Event_Key>100</Event_Key> 
</AWL_KeyDel_Events> 

et je voudrais l'afficher comme (l'ordre des enregistrements n'est pas important):

<AWL_KeyDel_Events> 
    <Event_Key>101</Event_Key> 
    <Event_Key>102</Event_Key> 
    <Event_Key>103</Event_Key> 
    <Event_Key>99</Event_Key> 
    <Event_Key>100</Event_Key> 
</AWL_KeyDel_Events> 

Y a-t-il un moyen de le faire?

Edit: Voici le fichier XML source:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
> 

<xsl:output method="xml" indent="yes" encoding="ascii" standalone="no" media-type="text/plain" omit-xml-declaration="yes"/> 

<xsl:output 
doctype-system="http://portal2.albertawellnet.org/dtd/waitlist/KeyModeSurgicalEvent.dtd" 
doctype-public="-//AHW//DTD WAITLIST 1.0//EN"></xsl:output> 

<xsl:template match="*"> 
    <xsl:apply-templates select="*"/> 
</xsl:template> 

<xsl:template match="/"> 
    <AWL_Document> 
     <AWL_Header> 
      <Facility_Code> 
       <xsl:value-of select="//FacilityIdentifier" /> 
      </Facility_Code> 
      <Service_Type>S</Service_Type> 
      <File_Name> 
       <xsl:value-of select="//SubmissionFileName"/> 
      </File_Name> 
      <Create_Timestamp> 
       <xsl:value-of select="//CurrentDate" /> 
      </Create_Timestamp> 
     </AWL_Header> 
     <AWL_Waitlist_Events> 
      <xsl:apply-templates/> 
     </AWL_Waitlist_Events> 
     <AWL_Footer> 
      <Total_Waitlist_Count> 
       <xsl:value-of select="count(//AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events/Detail_Collection/Detail[Invalid_Reason=''] | 
              //AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events/Detail_Collection/Detail[Invalid_Reason='Emergency Deletes'] | 
              //AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events/Detail_Collection/Detail[Invalid_Reason='Deletes'] | 
              //AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events/Detail_Collection/Detail[Invalid_Reason='entry error'])"/> 

      </Total_Waitlist_Count> 
      <KeySub_Waitlist_Count> 
       <xsl:value-of select="count(//AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events/Detail_Collection/Detail[Invalid_Reason=''])"/> 
      </KeySub_Waitlist_Count> 
      <KeyDel_Waitlist_Count> 
       <xsl:value-of select="count(//AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events/Detail_Collection/Detail[Invalid_Reason='Emergency Deletes'] | 
              //AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events/Detail_Collection/Detail[Invalid_Reason='Deletes'] | 
              //AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events/Detail_Collection/Detail[Invalid_Reason='entry error'])"/> 
      </KeyDel_Waitlist_Count> 
     </AWL_Footer> 
    </AWL_Document> 
</xsl:template> 

<xsl:template match="AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events"> 
</xsl:template> 

<xsl:template match="AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events[Invalid_Reason_Formated='Valid records to be sent']"> 
    <AWL_KeySub_Events> 
     <xsl:apply-templates/> 
    </AWL_KeySub_Events> 
</xsl:template> 


<xsl:template match="AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events[Invalid_Reason_Formated='Emergency Record: will be removed from waitlist'] | 
        AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events[Invalid_Reason_Formated='Entry Error: will be removed from waitlist'] | 
        AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events[Invalid_Reason_Formated='Entry Error or Emergency Record: will be removed from waitlist'] 
        "> 
    <AWL_KeyDel_Events> 
     <xsl:apply-templates/> 
    </AWL_KeyDel_Events> 
</xsl:template> 



<xsl:template match="AWL_Document/AWL_KeySub_Events_Collection/AWL_KeySub_Events/Detail_Collection/Detail"> 
    <Waitlist_Event> 


     <Event_Key> 
      <xsl:value-of select="Facility_Event_Key"/> 
     </Event_Key> 

     <ULI> 
      <xsl:value-of select="ULI"/> 
     </ULI> 

     <Gender> 
      <xsl:value-of select="Gender"/> 
     </Gender> 

     <Birth_Date> 
      <xsl:value-of select="Birth_Date"/> 
     </Birth_Date> 

     <Section_Code> 
      <xsl:value-of select="Section_Code"/> 
     </Section_Code> 

     <Group_Code_1> 
      <xsl:value-of select="Group_Code_1"/> 
     </Group_Code_1> 

     <Group_Code_2> 
      <xsl:value-of select="Group_Code_2"/> 
     </Group_Code_2> 

    </Waitlist_Event> 
</xsl:template> 

Et voici le résultat attendu:

<AWL_Document> 
<AWL_Header> 
<Facility_Code>001</Facility_Code> 
<Service_Type>S</Service_Type> 
<File_Name>FileName.xml</File_Name> 
<Create_Timestamp>201102140143</Create_Timestamp> 
</AWL_Header> 
    <AWL_Waitlist_Events> 
    <AWL_KeySub_Events> 
     <Waitlist_Event> 
     <Event_Key>107</Event_Key> 
     <ULI>000000000</ULI> 
     <Gender>F</Gender> 
     <Birth_Date>20000101</Birth_Date> 
    <Section_Code>1</Section_Code> 
    <Group_Code_1>Y</Group_Code_1> 
    <Group_Code_2>^</Group_Code_2> 
    </Waitlist_Event> 
</AWL_KeySub_Events> 
<AWL_KeyDel_Events> 
    <Waitlist_Event> 
    <Event_Key>101</Event_Key> 
    <ULI>000000000</ULI> 
    <Gender>F</Gender> 
    <Birth_Date>19700101</Birth_Date> 
    <Section_Code>1</Section_Code> 
    <Group_Code_1>Y</Group_Code_1> 
    <Group_Code_2>^</Group_Code_2> 
    </Waitlist_Event> 
    <Waitlist_Event> 
    <Event_Key>99</Event_Key> 
    <ULI>000000000</ULI> 
    <Gender>F</Gender> 
    <Birth_Date>19700202</Birth_Date> 
    <Section_Code>1</Section_Code> 
    <Group_Code_1>Y</Group_Code_1> 
    <Group_Code_2>^</Group_Code_2> 
    </Waitlist_Event> 
    <Waitlist_Event> 
    <Event_Key>102</Event_Key> 
    <ULI>000000000</ULI> 
    <Gender>F</Gender> 
    <Birth_Date>19800101</Birth_Date> 
    <Section_Code>1</Section_Code> 
    <Group_Code_1>Y</Group_Code_1> 
    <Group_Code_2>^</Group_Code_2> 
    </Waitlist_Event> 
    </AWL_KeyDel_Events> 
    </AWL_Waitlist_Events> 
    <AWL_Footer> 
    <Total_Waitlist_Count>4</Total_Waitlist_Count> 
    <KeySub_Waitlist_Count>1</KeySub_Waitlist_Count> 
    <KeyDel_Waitlist_Count>3</KeyDel_Waitlist_Count> 
     </AWL_Footer> 
</AWL_Document> 
+2

Probablement il * est * un moyen, surtout si vous fournissez le fichier XML source et le résultat souhaité ... –

+0

-1. Pas de source XML, désactivez downvote. – Flack

+0

Fichier source et résultat souhaité affiché. J'espère que cela clarifie la question. – VirtualLiz

Répondre

0

Je pense que vous avez besoin:

<xsl:template match="AWL_KeySub_Events"/> 
<xsl:template match="AWL_KeySub_Events[ 
         Invalid_Reason_Formated[ 
          .='Valid records to be sent' 
          or 
          contains(.,'will be removed from waitlist') 
         ] 
        ][1]"> 
    <AWL_KeySub_Events> 
     <xsl:apply-templates 
       select="../AWL_KeySub_Events[ 
         Invalid_Reason_Formated[ 
          .='Valid records to be sent' 
          or 
          contains(.,'will be removed from waitlist') 
         ] 
         ]/node()"/> 
    </AWL_KeySub_Events> 
</xsl:template> 

Remarque: Adaptation de la première requeriments de réunion et appliquer des modèles pour les enfants du groupe. Une règle vide avec moins de priorité correspondra à n'importe qui d'autre.

+0

Avec une petite modification, cela a parfaitement fonctionné. Merci pour l'aide. J'ai essayé de résoudre ce problème pendant un certain temps. – VirtualLiz

+0

@VirtualLiz: Vous êtes les bienvenus. –

0

Probablement vous voulez:

<xsl:template match="AWL_Document/AWL_KeySub_Events_Collection[.//AWL_KeySub_Events[contains(Invalid_Reason_Formated, 'will be removed from waitlist')]]"> 
     <AWL_KeyDel_Events> 
      <xsl:apply-templates select=".//AWL_KeySub_Events[contains(Invalid_Reason_Formated, 'will be removed from waitlist')]" mode="insert-event-key"/> 
     </AWL_KeyDel_Events> 
    </xsl:template> 

    <xsl:template match="AWL_KeySub_Events" mode="insert-event-key"> 
     <Event_Key><!-- fetch your key here--> </Event_Key> 
    </xsl:template> 

Mais c'est juste une supposition basée sur votre modèle.

+0

J'ai essayé cela, et ensuite posé le fichier source entier parce que j'ai compris que je n'avais pas donné assez d'informations. – VirtualLiz

Questions connexes