简体   繁体   中英

Sort XML by elements and then by value of sub-element

my knowledge is XSLT is sadly a "little bit limited", but maybe one an help or show the way:

This is my basic XML-file

<?xml version="1.0" standalone="yes"?>
<Topobase>
  <TB_GN_DIALOG>
    <ID>13</ID>
    <AUTOGRIDORDER>1</AUTOGRIDORDER>
  </TB_GN_DIALOG>
  <FORMS_VERSION>
    <Version>11000011</Version>
  </FORMS_VERSION>
  <TB_GN_CONTROL>
    <ID>32304</ID>
    <ALLOWREFERENCE>1</ALLOWREFERENCE>
  </TB_GN_CONTROL>
  <TB_GN_CONTROL>
    <ALLOWREFERENCE>1</ALLOWREFERENCE>
    <ID>32305</ID>
    <ASSEMBLYNAME>Autodesk.Map.IM.Forms.DLL</ASSEMBLYNAME>
  </TB_GN_CONTROL>
  <TB_GN_DIALOG>
    <ID>1543</ID>
    <AUTOGRIDORDER>1</AUTOGRIDORDER>
  </TB_GN_DIALOG>
.....

The idea is to sort twice: a) The main elements should be sorted alphabetically into "groups":

<Topobase>
  <FORMS_VERSION>
...
  <TB_GN_CONTROL>
....
  <TB_GN_CONTROL>
....
  <TB_GN_DIALOG>
...
  <TB_GN_DIALOG>
...

b) Inside the grouped elements, they should be sorted by

 <TB_GN_DIALOG>
...<ID>13</ID>...
  <TB_GN_DIALOG>
...<ID>28</ID>...
  <TB_GN_DIALOG>
...<ID>542</ID>...
  <TB_GN_DIALOG>
...<ID>678</ID>...

I found here some XSLT going into this direction, but some are only by name or only by attribute. but this strange mixture of "groups" and sub-elements could be a little bit tricky.

Thanks in advance!

Edit: Added Full XML-Example

<Topobase>
  <FORMS_VERSION>
    <Version>11000011</Version>
  </FORMS_VERSION>
  <TB_GN_DIALOG>
    <ID>1175</ID>
    <AUTOGRIDORDER>1</AUTOGRIDORDER>
    <AUTOTABORDER>1</AUTOTABORDER>
    <CAPTION>Normschacht</CAPTION>
    <DEFAULTHEIGHT>1022</DEFAULTHEIGHT>
    <DEFAULTISDOCKED>0</DEFAULTISDOCKED>
    <DEFAULTLEFT>1820</DEFAULTLEFT>
    <DEFAULTMODE>1</DEFAULTMODE>
    <DEFAULTTAB>1</DEFAULTTAB>
    <DEFAULTTABSVISIBLE>1</DEFAULTTABSVISIBLE>
    <DEFAULTTOP>85</DEFAULTTOP>
    <DEFAULTWIDTH>893</DEFAULTWIDTH>
    <DETAILHEIGHT>100</DETAILHEIGHT>
    <DIALOGNAME>WW_PO_MA_MANHOLE</DIALOGNAME>
    <REGISTERNAMES>Normschacht;Weitere;</REGISTERNAMES>
    <STARTMODE>0</STARTMODE>
    <TABGROUPSUSPEND>||</TABGROUPSUSPEND>
    <TABLENAME>WW_PO_MA_MANHOLE</TABLENAME>
    <TOOLBAR_ID>1</TOOLBAR_ID>
  </TB_GN_DIALOG>
  <TB_GN_CONTROL>
    <ID>26851</ID>
    <ALIGNRIGHT>1</ALIGNRIGHT>
    <ALLOWREFERENCE>1</ALLOWREFERENCE>
    <ASSEMBLYNAME>Autodesk.Map.IM.Forms.DLL</ASSEMBLYNAME>
    <BASEVISIBILITY>0</BASEVISIBILITY>
    <CAPTION>T2t_fid_contact_owner:</CAPTION>
    <CLASSNAME>TextBox</CLASSNAME>
    <CLASSNAMESPACE>Autodesk.Map.IM.Forms.DialogControls</CLASSNAMESPACE>
    <COLUMNNAME>T2T_FID_CONTACT_OWNER</COLUMNNAME>
    <COLWIDTH>200</COLWIDTH>
    <DETAILFIELDISNUMERIC>1</DETAILFIELDISNUMERIC>
    <DIALOG_ID>1175</DIALOG_ID>
    <ENFORCEUPPER>0</ENFORCEUPPER>
    <FILESELECTION>0</FILESELECTION>
    <FILTERCOMBOBOX>0</FILTERCOMBOBOX>
    <GRIDORDER>0</GRIDORDER>
    <HEIGHT>22</HEIGHT>
    <HIDEATGRID>0</HIDEATGRID>
    <ISLOCKED>0</ISLOCKED>
    <ISOBLIGATE>0</ISOBLIGATE>
    <ISUNIQUE>0</ISUNIQUE>
    <LEFT>160</LEFT>
    <MULTILINE>0</MULTILINE>
    <NAME>T2T_FID_CONTACT_OWNER</NAME>
    <PRIORITY>100</PRIORITY>
    <TABID>0</TABID>
    <TOP>1401</TOP>
    <WIDTH>200</WIDTH>
    <WORDWRAP>0</WORDWRAP>
  </TB_GN_CONTROL>
  <TB_GN_CONTROL>
    <ID>26852</ID>
    <ALLOWDOUBLECLICK>1</ALLOWDOUBLECLICK>
    <ALLOWREFERENCE>1</ALLOWREFERENCE>
    <ASSEMBLYNAME>Autodesk.Map.IM.Forms.DLL</ASSEMBLYNAME>
    <BASEVISIBILITY>0</BASEVISIBILITY>
    <CAPTION>ID - Material Benutzerdefiniert:</CAPTION>
    <CLASSNAME>ComboBox</CLASSNAME>
    <CLASSNAMESPACE>Autodesk.Map.IM.Forms.DialogControls</CLASSNAMESPACE>
    <COLUMNNAME>ID_MATERIAL_USER</COLUMNNAME>
    <COLWIDTH>200</COLWIDTH>
    <DETAILFIELDISNUMERIC>1</DETAILFIELDISNUMERIC>
    <DETAILFIELDNAME>ID</DETAILFIELDNAME>
    <DETAILFILTER>ACTIVE=1</DETAILFILTER>
    <DETAILLIST>VALUE</DETAILLIST>
    <DETAILORDERBY>VALUE</DETAILORDERBY>
    <DETAILTABLE>WW_PO_MATERIAL_USER_TBD</DETAILTABLE>
    <DIALOG_ID>1175</DIALOG_ID>
    <FIDBUTTON>0</FIDBUTTON>
    <GRIDORDER>0</GRIDORDER>
    <HEIGHT>22</HEIGHT>
    <HIDEATGRID>0</HIDEATGRID>
    <HIGHLIGHTBUTTON>0</HIGHLIGHTBUTTON>
    <ISLOCKED>0</ISLOCKED>
    <ISOBLIGATE>0</ISOBLIGATE>
    <ISUNIQUE>0</ISUNIQUE>
    <LEFT>160</LEFT>
    <NAME>ID_MATERIAL_USER</NAME>
    <PRIORITY>100</PRIORITY>
    <TABID>0</TABID>
    <TOP>1428</TOP>
    <USEBUFFER>1</USEBUFFER>
    <WIDTH>200</WIDTH>
  </TB_GN_CONTROL>
  <TB_GN_CONTROL>
    <ID>26853</ID>
    <ALLOWREFERENCE>1</ALLOWREFERENCE>
    <ASSEMBLYNAME>Autodesk.Map.IM.Forms.DLL</ASSEMBLYNAME>
    <BASEVISIBILITY>0</BASEVISIBILITY>
    <CAPTION>Ww_po_fi_fitting:</CAPTION>
    <CLASSNAME>Reference</CLASSNAME>
    <CLASSNAMESPACE>Autodesk.Map.IM.Forms.DialogControls</CLASSNAMESPACE>
    <COLWIDTH>200</COLWIDTH>
    <DETAILFIELDISNUMERIC>1</DETAILFIELDISNUMERIC>
    <DETAILFIELDNAME>FID_FEATURE</DETAILFIELDNAME>
    <DETAILTABLE>WW_PO_FI_FITTING</DETAILTABLE>
    <DIALOG_ID>1175</DIALOG_ID>
    <GRIDORDER>0</GRIDORDER>
    <HEIGHT>22</HEIGHT>
    <HIDEATGRID>0</HIDEATGRID>
    <LEFT>160</LEFT>
    <MASTERFIELDNAME>FID</MASTERFIELDNAME>
    <NAME>$REF_WW_PO_FI_FITTING</NAME>
    <PRIORITY>100</PRIORITY>
    <PROJECTIONBUTTON>1</PROJECTIONBUTTON>
    <REFERENCEBUTTON>1</REFERENCEBUTTON>
    <TABID>0</TABID>
    <TOP>1455</TOP>
    <WIDTH>200</WIDTH>
  </TB_GN_CONTROL>
  <TB_GN_CONTROL>
    <ID>26763</ID>
    <ALLOWREFERENCE>1</ALLOWREFERENCE>
    <ASSEMBLYNAME>Autodesk.Map.IM.Forms.DLL</ASSEMBLYNAME>
    <BASEVISIBILITY>1</BASEVISIBILITY>
    <CLASSNAME>ApiControl</CLASSNAME>
    <CLASSNAMESPACE>Autodesk.Map.IM.Forms.DialogControls</CLASSNAMESPACE>
    <COLWIDTH>70</COLWIDTH>
    <CUSTOMPROPS>ControlProperties||</CUSTOMPROPS>
    <DETAILFIELDISNUMERIC>1</DETAILFIELDISNUMERIC>
    <DIALOG_ID>1175</DIALOG_ID>
    <GRIDORDER>0</GRIDORDER>
    <HEIGHT>22</HEIGHT>
    <HIDEATGRID>0</HIDEATGRID>
    <ISOBLIGATE>0</ISOBLIGATE>
    <LEFT>570</LEFT>
    <NAME>$STARTINGLINES</NAME>
    <PLUGINASSEMBLYNAME>Autodesk.Map.IM.Forms.dll</PLUGINASSEMBLYNAME>
    <PLUGINCLASSNAME>BUTTON</PLUGINCLASSNAME>
    <PLUGINCLASSNAMESPACE>Autodesk.Map.IM.Forms</PLUGINCLASSNAMESPACE>
    <PRIORITY>100</PRIORITY>
    <TABID>2</TABID>
    <TOP>313</TOP>
    <WIDTH>200</WIDTH>
  </TB_GN_CONTROL>
  <TB_GN_CONTROL>
    <ID>26764</ID>
    <ALLOWREFERENCE>1</ALLOWREFERENCE>
    <ASSEMBLYNAME>Autodesk.Map.IM.Forms.DLL</ASSEMBLYNAME>
    <BASEVISIBILITY>1</BASEVISIBILITY>
    <CLASSNAME>Line</CLASSNAME>
    <CLASSNAMESPACE>Autodesk.Map.IM.Forms.DialogControls</CLASSNAMESPACE>
    <COLWIDTH>200</COLWIDTH>
    <DETAILFIELDISNUMERIC>1</DETAILFIELDISNUMERIC>
    <DIALOG_ID>1175</DIALOG_ID>
    <FORECOLOR>Gray</FORECOLOR>
    <GRIDORDER>0</GRIDORDER>
    <HEIGHT>22</HEIGHT>
    <HIDEATGRID>0</HIDEATGRID>
    <LEFT>80</LEFT>
    <LINESIZE>1</LINESIZE>
    <MULTILINE>0</MULTILINE>
    <NAME>$LINEVERBUNDENE</NAME>
    <PRIORITY>9</PRIORITY>
    <TABID>1</TABID>
    <TOP>733</TOP>
    <VERTICAL>0</VERTICAL>
    <WIDTH>690</WIDTH>
  </TB_GN_CONTROL>
  <TB_GN_CONTROL>
    <ID>26765</ID>
    <ALIGNRIGHT>0</ALIGNRIGHT>
    <ALLOWREFERENCE>1</ALLOWREFERENCE>
    <ASSEMBLYNAME>Autodesk.Map.IM.Forms.DLL</ASSEMBLYNAME>
    <BASEVISIBILITY>1</BASEVISIBILITY>
    <CLASSNAME>Label</CLASSNAME>
    <CLASSNAMESPACE>Autodesk.Map.IM.Forms.DialogControls</CLASSNAMESPACE>
    <COLWIDTH>40</COLWIDTH>
    <DETAILFIELDISNUMERIC>1</DETAILFIELDISNUMERIC>
    <DIALOG_ID>1175</DIALOG_ID>
    <FONTNAME>Microsoft Sans Serif</FONTNAME>
    <FONTSIZE>8</FONTSIZE>
    <FONTSTYLE>0</FONTSTYLE>
    <FORECOLOR>Black</FORECOLOR>
    <GRIDORDER>0</GRIDORDER>
    <HEIGHT>22</HEIGHT>
    <HIDEATGRID>0</HIDEATGRID>
    <LEFT>0</LEFT>
    <NAME>$LABELVERBUNDENE</NAME>
    <PRIORITY>100</PRIORITY>
    <TABID>1</TABID>
    <TEXT>Verbundene</TEXT>
    <TOP>733</TOP>
    <WIDTH>80</WIDTH>
  </TB_GN_CONTROL>
  <TB_GN_CONTROL>
    <ID>26766</ID>
    <ALIGNRIGHT>1</ALIGNRIGHT>
    <ALLOWREFERENCE>1</ALLOWREFERENCE>
    <ASSEMBLYNAME>Autodesk.Map.IM.Forms.DLL</ASSEMBLYNAME>
    <BASEVISIBILITY>1</BASEVISIBILITY>
    <CAPTION>Sohlenkote:</CAPTION>
    <CLASSNAME>TextBox</CLASSNAME>
    <CLASSNAMESPACE>Autodesk.Map.IM.Forms.DialogControls</CLASSNAMESPACE>
    <COLUMNNAME>BOTTOM_ELEVATION</COLUMNNAME>
    <COLWIDTH>84</COLWIDTH>
    <DETAILFIELDISNUMERIC>1</DETAILFIELDISNUMERIC>
    <DIALOG_ID>1175</DIALOG_ID>
    <ENFORCEUPPER>0</ENFORCEUPPER>
    <FILESELECTION>0</FILESELECTION>
    <FILTERCOMBOBOX>0</FILTERCOMBOBOX>
    <GRIDORDER>0</GRIDORDER>
    <HEIGHT>22</HEIGHT>
    <HIDEATGRID>0</HIDEATGRID>
    <ISLOCKED>0</ISLOCKED>
    <ISOBLIGATE>0</ISOBLIGATE>
    <ISUNIQUE>0</ISUNIQUE>
    <LEFT>170</LEFT>
    <MULTILINE>0</MULTILINE>
    <NAME>BOTTOM_ELEVATION</NAME>
    <NEXTCONTROL>ID_MATERIAL</NEXTCONTROL>
    <PRECISION>3</PRECISION>
    <PRIORITY>100</PRIORITY>
    <TABID>1</TABID>
    <TOOLTIPTEXT>Meter. Leer, wenn unbekannt.</TOOLTIPTEXT>
    <TOP>453</TOP>
    <WIDTH>60</WIDTH>
    <WORDWRAP>0</WORDWRAP>
  </TB_GN_CONTROL>
  <TB_GN_CONTROL>
    <ID>26767</ID>
    <ALIGNRIGHT>0</ALIGNRIGHT>
    <ALLOWREFERENCE>1</ALLOWREFERENCE>
    <ASSEMBLYNAME>Autodesk.Map.IM.Forms.DLL</ASSEMBLYNAME>
    <BASEVISIBILITY>1</BASEVISIBILITY>
    <CAPTION>Erstellungsdatum: (*)</CAPTION>
    <CLASSNAME>TextBox</CLASSNAME>
    <CLASSNAMESPACE>Autodesk.Map.IM.Forms.DialogControls</CLASSNAMESPACE>
    <COLUMNNAME>DATE_CREATION</COLUMNNAME>
    <COLWIDTH>129</COLWIDTH>
    <DATEFORMAT>d</DATEFORMAT>
    <DETAILFIELDISNUMERIC>1</DETAILFIELDISNUMERIC>
    <DIALOG_ID>1175</DIALOG_ID>
    <ENFORCEUPPER>0</ENFORCEUPPER>
    <FILESELECTION>0</FILESELECTION>
    <FILTERCOMBOBOX>0</FILTERCOMBOBOX>
    <GRIDORDER>0</GRIDORDER>
    <HEIGHT>22</HEIGHT>
    <HIDEATGRID>0</HIDEATGRID>
    <ISLOCKED>0</ISLOCKED>
    <ISOBLIGATE>0</ISOBLIGATE>
    <ISUNIQUE>0</ISUNIQUE>
    <LEFT>570</LEFT>
    <MULTILINE>0</MULTILINE>
    <NAME>DATE_CREATION</NAME>
    <NEXTCONTROL>DATE_MODIFICATION</NEXTCONTROL>
    <PRIORITY>100</PRIORITY>
    <TABID>1</TABID>
    <TOP>173</TOP>
    <WIDTH>200</WIDTH>
    <WORDWRAP>0</WORDWRAP>
  </TB_GN_CONTROL>
  <TB_GN_CONTROL>
    <ID>26768</ID>
    <ALLOWREFERENCE>1</ALLOWREFERENCE>
    <ASSEMBLYNAME>Autodesk.Map.IM.Forms.DLL</ASSEMBLYNAME>
    <BASEVISIBILITY>0</BASEVISIBILITY>
    <CAPTION>Förderggregat:</CAPTION>
    <CLASSNAME>Reference</CLASSNAME>
    <CLASSNAMESPACE>Autodesk.Map.IM.Forms.DialogControls</CLASSNAMESPACE>
    <COLWIDTH>200</COLWIDTH>
    <DETAILFIELDISNUMERIC>1</DETAILFIELDISNUMERIC>
    <DETAILFIELDNAME>FID_FEATURE_TO</DETAILFIELDNAME>
    <DETAILTABLE>WW_PO_OU_CONVEYING</DETAILTABLE>
    <DIALOG_ID>1175</DIALOG_ID>
    <GRIDORDER>0</GRIDORDER>
    <HEIGHT>22</HEIGHT>
    <HIDEATGRID>0</HIDEATGRID>
    <LEFT>180</LEFT>
    <MASTERFIELDNAME>FID</MASTERFIELDNAME>
    <NAME>$REF_WW_PO_OU_CONVEYING</NAME>
    <PRIORITY>100</PRIORITY>
    <PROJECTIONBUTTON>1</PROJECTIONBUTTON>
    <REFERENCEBUTTON>1</REFERENCEBUTTON>
    <TABID>2</TABID>
    <TOP>313</TOP>
    <WIDTH>200</WIDTH>
  </TB_GN_CONTROL>
  <TB_GN_DIALOG_BAR>
    <ID>1</ID>
    <NAME>Objekt</NAME>
  </TB_GN_DIALOG_BAR>
  <TB_GN_DIALOG_BAR_FILTER>
    <ID>a208ad72-bb0e-410e-8ab1-672a8bf2bb50</ID>
    <BAR_ID>1</BAR_ID>
    <NAME>Autodesk.Map.IM.Map.MapDialog/TBDigitizeChildren</NAME>
    <USERGROUP_ID>a0194cac-0b6c-4ed9-a631-aa125c7c950e</USERGROUP_ID>
  </TB_GN_DIALOG_BAR_FILTER>
  <TB_GN_DIALOG_BAR_FILTER>
    <ID>bf8b2c9c-36bf-48df-9edf-e22dc06d41f0</ID>
    <BAR_ID>1</BAR_ID>
    <NAME>Autodesk.Map.IM.Map.MapDialog/TBDigitizeHole</NAME>
    <USERGROUP_ID>a0194cac-0b6c-4ed9-a631-aa125c7c950e</USERGROUP_ID>
  </TB_GN_DIALOG_BAR_FILTER>
  <TB_GN_DIALOG_BAR_FILTER>
    <ID>fef9076a-ad2f-4ed4-ac43-2681e8273390</ID>
    <BAR_ID>1</BAR_ID>
    <NAME>Autodesk.Map.IM.Map.MapDialog/TBDigitize</NAME>
    <USERGROUP_ID>a0194cac-0b6c-4ed9-a631-aa125c7c950e</USERGROUP_ID>
  </TB_GN_DIALOG_BAR_FILTER>
  <TB_GN_DIALOG_BAR_FILTER>
    <ID>ac567c26-aea2-43c2-9f2e-b83f5b047d62</ID>
    <BAR_ID>1</BAR_ID>
    <NAME>Autodesk.Map.IM.Forms.Basis.BasisDialog/tbb_Delete</NAME>
    <USERGROUP_ID>a0194cac-0b6c-4ed9-a631-aa125c7c950e</USERGROUP_ID>
  </TB_GN_DIALOG_BAR_FILTER>
  <TB_GN_DIALOG_PROJECTION>
    <ID>38</ID>
    <DIALOG_ID>1175</DIALOG_ID>
    <PROJECTION_DIALOG_NAME>WW_DISPOSITION_STATE_TBD</PROJECTION_DIALOG_NAME>
    <PROJECTION_FILTER>ID in (select ID_STATE  from WW_PO_MA_MANHOLE where {Filter})</PROJECTION_FILTER>
    <PROJECTION_NAME>Status</PROJECTION_NAME>
  </TB_GN_DIALOG_PROJECTION>
  <TB_GN_DIALOG_PROJECTION>
    <ID>39</ID>
    <DIALOG_ID>1175</DIALOG_ID>
    <PROJECTION_DIALOG_NAME>WW_PO_MA_FUNCTION_TBD</PROJECTION_DIALOG_NAME>
    <PROJECTION_FILTER>ID in (select ID_FUNCTION  from WW_PO_MA_MANHOLE where {Filter})</PROJECTION_FILTER>
    <PROJECTION_NAME>Funktion</PROJECTION_NAME>
  </TB_GN_DIALOG_PROJECTION>
  <TB_GN_DIALOG_PROJECTION>
    <ID>40</ID>
    <DIALOG_ID>1175</DIALOG_ID>
    <PROJECTION_DIALOG_NAME>WW_UTILISATION_TBD</PROJECTION_DIALOG_NAME>
    <PROJECTION_FILTER>ID in (select ID_UTILISATION  from WW_PO_MA_MANHOLE where {Filter})</PROJECTION_FILTER>
    <PROJECTION_NAME>Nutzung / Wassserart</PROJECTION_NAME>
  </TB_GN_DIALOG_PROJECTION>
  <TB_GN_DIALOG_PROJECTION>
    <ID>41</ID>
    <DIALOG_ID>1175</DIALOG_ID>
    <PROJECTION_DIALOG_NAME>WW_PO_FI_FITTING</PROJECTION_DIALOG_NAME>
    <PROJECTION_FILTER>FID_FEATURE in (select FID  from WW_PO_MA_MANHOLE)</PROJECTION_FILTER>
    <PROJECTION_NAME>Haltungsverbindung</PROJECTION_NAME>
  </TB_GN_DIALOG_PROJECTION>
  <TB_GN_REPORT>
    <ID>112</ID>
    <DESKTOP>1</DESKTOP>
    <DIALOG_ID>1175</DIALOG_ID>
    <FILENAME>Liste Normschacht</FILENAME>
    <NAME>Liste Normschacht</NAME>
    <PROPS>Format=DEFAULT</PROPS>
    <REPORTTYPE>Topobase Report</REPORTTYPE>
    <WEB>0</WEB>
  </TB_GN_REPORT>
  <TB_GN_REPORT>
    <ID>110</ID>
    <DESKTOP>1</DESKTOP>
    <DIALOG_ID>1175</DIALOG_ID>
    <NAME>Default</NAME>
    <REPORTTYPE>Default</REPORTTYPE>
    <WEB>0</WEB>
  </TB_GN_REPORT>
  <TB_GN_REPORT>
    <ID>111</ID>
    <DESKTOP>1</DESKTOP>
    <DIALOG_ID>1175</DIALOG_ID>
    <FILENAME>Bericht Normschacht</FILENAME>
    <NAME>Bericht Normschacht</NAME>
    <PROPS>Format=DEFAULT</PROPS>
    <REPORTTYPE>Topobase Report</REPORTTYPE>
    <WEB>0</WEB>
  </TB_GN_REPORT>
  <TB_USERGROUP>
    <ID>5ddd0fea-8554-4665-9f5b-6fa2da3b0b12</ID>
    <NAME>LEHRLING</NAME>
  </TB_USERGROUP>
  <TB_USERGROUP>
    <ID>b19d9a62-25f5-4a1a-a8a3-79b267808830</ID>
    <NAME>ADMIN</NAME>
  </TB_USERGROUP>
  <TB_USERGROUP>
    <ID>5dffd865-1a86-4e06-a716-e646d48a973e</ID>
    <NAME>GR_BENUTZER</NAME>
  </TB_USERGROUP>
  <TB_USERGROUP>
    <ID>a0194cac-0b6c-4ed9-a631-aa125c7c950e</ID>
    <NAME>GR_BETRACHTER</NAME>
  </TB_USERGROUP>
</Topobase>```

It would have been easier to understand your requirements with a more detailed example, but I think this does what you want :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="2.0">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="Topobase">
    <xsl:element name="Topobase">
        <xsl:for-each-group select="*" group-by="name()">
            <xsl:sort select="name()"/>
            <xsl:for-each select="current-group()">
            <xsl:sort select="ID" data-type="number"/>
                <xsl:copy-of select="current()"/>
            </xsl:for-each>
       </xsl:for-each-group>
   </xsl:element>
  </xsl:template>

</xsl:stylesheet>

You can also see it working here : https://xsltfiddle.liberty-development.net/94AbWBh

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM