Moin,
ich habe zwei große XML-Dateien, die in etwa wie folgt aussehen:
Um zwei solcher Reports vernünftig abgleichen zu können, möchte ich nun die Reports vollständig rekursiv sortieren.
Ich habe bereits etwas mit <xsl:sort> experimentiert, aber die Ergebnisse waren eher bescheiden.
Ideal wäre es, wenn die SecurityClass-Elemente nach ID und Name sortiert würden, die Ausbauvariante auch noch alle Attribute zu sortieren, spare ich mir für später ...
Meine Vorstellung wäre
- Kopiere das Root-Element
- apply-templates für alle Elemente
- template für das Server-Element, apply-templates für alle SecurityClass-Elemente sortiert nach ID und Name
- template für das SecurityClass-Element, apply-templates für alle Child-Elemente sortiert nach ID und Name
- template für alle Elemente, copy-of des Elements, falls Child-Elemente existieren apply-templates für alle Child-Elemente
Ist der Ansatz richtig?
Kann mir jemand ein grobes Raster vorgeben?
Vielen Dank im voraus!
ich habe zwei große XML-Dateien, die in etwa wie folgt aussehen:
Code:
<?xml version="1.0" encoding="UTF-8"?> <Report Type="AllRights" Description="Komplette Übersicht der konfigurierten Zugriffsrechte eines Mandanten" Date="2016-07-04T15:42:23.290+02:00"> <Server CSBServerURL="https://domain.tld:8443/sedna-transfer-service-xf/services"/> <SecurityClass Name="ActiveXWindowDefinitions" Alias="APP - ActiveX Fenster"/> <SecurityClass Name="FolderDisplays" Alias="REC - Aktenanzeigen"> <Object ID="322d2ace-b741-4daa-bbb0-9ca93a46f743" Name="Aktenanzeige" Alias="Aktenanzeige" OwnerName="Supervisor" OwnerType="Person" OwnerID="00000004-0005-9000-0000-000000000003" NamespaceGUID="00000001-0001-9000-0000-000000000002" NamespaceWithName="dom:Aktenanzeige" FullyQualifiedName="http://com.domain/Aktenanzeige"> <ObjectRightProperty ID="1073741824" Name="DenySAChangeOwner" Alias="Eigentümer ändern" Mask="0"/> <ObjectRightProperty ID="2147483648" Name="DenySADelegate" Alias="Weitergeben" Mask="0"/> <AccessIdentifier ID="00000004-0007-9000-0000-000000000002" Type="Role" Name="admins" Alias="admins"> <Right ID="2" Name="delete" Alias="Administrativ - Löschen" Allow="1" Deny="0" Delegate="0"/> <Right ID="1" Name="update" Alias="Administrativ - Editieren" Allow="1" Deny="0" Delegate="0"/> </AccessIdentifier> </Object> <Object ID="17e42e1b-b91f-4d35-b0e4-2cc5f3e43eaf" Name="Ablage" Alias="Ablage" OwnerName="Supervisor" OwnerType="Person" OwnerID="00000004-0005-9000-0000-000000000003" NamespaceGUID="00000001-0001-9000-0000-000000000002" NamespaceWithName="dom:Ablage" FullyQualifiedName="http://com.org/Ablage"> <ObjectRightProperty ID="1073741824" Name="DenySAChangeOwner" Alias="Eigentümer ändern" Mask="0"/> <ObjectRightProperty ID="2147483648" Name="DenySADelegate" Alias="Weitergeben" Mask="0"/> <AccessIdentifier ID="00000004-0007-9000-0000-000000000002" Type="Role" Name="admins" Alias="admins"> <Right ID="2" Name="delete" Alias="Administrativ - Löschen" Allow="1" Deny="0" Delegate="0"/> <Right ID="1" Name="update" Alias="Administrativ - Editieren" Allow="1" Deny="0" Delegate="0"/> </AccessIdentifier> </Object> </SecurityClass> <!-- hier kommen viele weitere SecurityClass elemente --> </Report>
Ich habe bereits etwas mit <xsl:sort> experimentiert, aber die Ergebnisse waren eher bescheiden.
Ideal wäre es, wenn die SecurityClass-Elemente nach ID und Name sortiert würden, die Ausbauvariante auch noch alle Attribute zu sortieren, spare ich mir für später ...
Meine Vorstellung wäre
- Kopiere das Root-Element
- apply-templates für alle Elemente
- template für das Server-Element, apply-templates für alle SecurityClass-Elemente sortiert nach ID und Name
- template für das SecurityClass-Element, apply-templates für alle Child-Elemente sortiert nach ID und Name
- template für alle Elemente, copy-of des Elements, falls Child-Elemente existieren apply-templates für alle Child-Elemente
Ist der Ansatz richtig?
Kann mir jemand ein grobes Raster vorgeben?
Vielen Dank im voraus!
Comment