I have below sample xml data. I need to sort the elements and data at multiple levels.
1. sort has to be happend at just below the root level like <InventoryRecord><SalesInRecord><SellOutRecord>
2. sort has to be happend for all the elements in each <InventoryRecord> or <SalesInRecord> or <SellOutRecord> on fields name
3. sort has to be happend on data in <LOCATION_ID><LOCATION_ID_DB><LOCATION_NAME> fields in the each record set irrespective of record set type.
here the important thing is that, for some records <LOCATION_ID> element may not available.
in that case sort should happen on only <LOCATION_ID_DB><LOCATION_NAME> values.
<root>
<SellOutRecord>
<FILE_TYPE>STOSO</FILE_TYPE>
<RECORD_TYPE>VALID</RECORD_TYPE>
<RECORD_NO>1</RECORD_NO>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
</SellOutRecord>
<SellOutRecord>
<FILE_TYPE>STOSO</FILE_TYPE>
<RECORD_TYPE>ERROR</RECORD_TYPE>
<RECORD_NO>2</RECORD_NO>
<LOCATION_NAME>XYZ ABC</LOCATION_NAME>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
</SellOutRecord>
<SellOutRecord>
<FILE_TYPE>STOSO</FILE_TYPE>
<RECORD_TYPE>WARNING</RECORD_TYPE>
<RECORD_NO>3</RECORD_NO>
<LOCATION_ID>2-3LG-2450</LOCATION_ID>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
</SellOutRecord>
<SellOutRecord>
<FILE_TYPE>STOSO</FILE_TYPE>
<RECORD_TYPE>ERROR</RECORD_TYPE>
<RECORD_NO>4</RECORD_NO>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
</SellOutRecord>
<SellOutRecord>
<FILE_TYPE>STOSO</FILE_TYPE>
<RECORD_TYPE>ERROR</RECORD_TYPE>
<RECORD_NO>6</RECORD_NO>
<LOCATION_NAME>XYZ ABC</LOCATION_NAME>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
</SellOutRecord>
<InventoryRecord>
<FILE_TYPE>STOIV</FILE_TYPE>
<RECORD_TYPE>ERROR</RECORD_TYPE>
<RECORD_NO>2</RECORD_NO>
<LOCATION_ID>2-3LG-2450</LOCATION_ID>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
</InventoryRecord>
<InventoryRecord>
<FILE_TYPE>STOIV</FILE_TYPE>
<RECORD_TYPE>VALID</RECORD_TYPE>
<RECORD_NO>4</RECORD_NO>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
</InventoryRecord>
<InventoryRecord>
<FILE_TYPE>STOIV</FILE_TYPE>
<RECORD_TYPE>VALID</RECORD_TYPE>
<RECORD_NO>5</RECORD_NO>
<LOCATION_NAME>XYZ ABC</LOCATION_NAME>>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
</InventoryRecord>
<InventoryRecord>
<FILE_TYPE>STOIV</FILE_TYPE>
<RECORD_TYPE>ERROR</RECORD_TYPE>
<RECORD_NO>8</RECORD_NO>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
</InventoryRecord>
<SalesInRecord>
<FILE_TYPE>STOSI</FILE_TYPE>
<RECORD_TYPE>VALID</RECORD_TYPE>
<RECORD_NO>3</RECORD_NO>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
</SalesInRecord>
<SalesInRecord>
<FILE_TYPE>STOSI</FILE_TYPE>
<RECORD_TYPE>WARNING</RECORD_TYPE>
<RECORD_NO>3</RECORD_NO>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
</SalesInRecord>
<SalesInRecord>
<FILE_TYPE>STOSI</FILE_TYPE>
<RECORD_TYPE>ERROR</RECORD_TYPE>
<RECORD_NO>4</RECORD_NO>
<LOCATION_ID>2-3LG-2450</LOCATION_ID>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
</SalesInRecord>
<SalesInRecord>
<FILE_TYPE>STOSI</FILE_TYPE>
<RECORD_TYPE>ERROR</RECORD_TYPE>
<RECORD_NO>7</RECORD_NO>
<LOCATION_NAME>XYZ ABC</LOCATION_NAME>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
</SalesInRecord>
</root>
the expected output would be.
<root>
<InventoryRecord>
<FILE_TYPE>STOIV</FILE_TYPE>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
<LOCATION_NAME>XYZ ABC</LOCATION_NAME>
<RECORD_NO>5</RECORD_NO>
<RECORD_TYPE>VALID</RECORD_TYPE>
</InventoryRecord>
<InventoryRecord>
<FILE_TYPE>STOIV</FILE_TYPE>
<LOCATION_ID>2-3LG-2450</LOCATION_ID>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<RECORD_NO>2</RECORD_NO>
<RECORD_TYPE>ERROR</RECORD_TYPE>
</InventoryRecord>
<InventoryRecord>
<FILE_TYPE>STOIV</FILE_TYPE>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<RECORD_NO>4</RECORD_NO>
<RECORD_TYPE>VALID</RECORD_TYPE>
</InventoryRecord>
<InventoryRecord>
<FILE_TYPE>STOIV</FILE_TYPE>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<RECORD_NO>8</RECORD_NO>
<RECORD_TYPE>ERROR</RECORD_TYPE>
</InventoryRecord>
<SalesInRecord>
<FILE_TYPE>STOSI</FILE_TYPE>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
<LOCATION_NAME>XYZ ABC</LOCATION_NAME>
<RECORD_NO>7</RECORD_NO>
<RECORD_TYPE>ERROR</RECORD_TYPE>
</SalesInRecord>
<SalesInRecord>
<FILE_TYPE>STOSI</FILE_TYPE>
<LOCATION_ID>2-3LG-2450</LOCATION_ID>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<RECORD_NO>4</RECORD_NO>
<RECORD_TYPE>ERROR</RECORD_TYPE>
</SalesInRecord>
<SalesInRecord>
<FILE_TYPE>STOSI</FILE_TYPE>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<RECORD_NO>3</RECORD_NO>
<RECORD_TYPE>VALID</RECORD_TYPE>
</SalesInRecord>
<SalesInRecord>
<FILE_TYPE>STOSI</FILE_TYPE>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<RECORD_NO>3</RECORD_NO>
<RECORD_TYPE>WARNING</RECORD_TYPE>
</SalesInRecord>
<SellOutRecord>
<FILE_TYPE>STOSO</FILE_TYPE>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
<LOCATION_NAME>XYZ ABC</LOCATION_NAME>
<RECORD_NO>2</RECORD_NO>
<RECORD_TYPE>ERROR</RECORD_TYPE>
</SellOutRecord>
<SellOutRecord>
<FILE_TYPE>STOSO</FILE_TYPE>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
<LOCATION_NAME>XYZ ABC</LOCATION_NAME>
<RECORD_NO>6</RECORD_NO>
<RECORD_TYPE>ERROR</RECORD_TYPE>
</SellOutRecord>
<SellOutRecord>
<FILE_TYPE>STOSO</FILE_TYPE>
<LOCATION_ID>2-3LG-2450</LOCATION_ID>
<LOCATION_ID_DB>-1</LOCATION_ID_DB>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<RECORD_NO>3</RECORD_NO>
<RECORD_TYPE>WARNING</RECORD_TYPE>
</SellOutRecord>
<SellOutRecord>
<FILE_TYPE>STOSO</FILE_TYPE>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<RECORD_NO>1</RECORD_NO>
<RECORD_TYPE>VALID</RECORD_TYPE>
</SellOutRecord>
<SellOutRecord>
<FILE_TYPE>STOSO</FILE_TYPE>
<LOCATION_ID>2-3LG-2456</LOCATION_ID>
<LOCATION_ID_DB>2-3LG-2456</LOCATION_ID_DB>
<LOCATION_NAME>XYZ XYZ</LOCATION_NAME>
<RECORD_NO>4</RECORD_NO>
<RECORD_TYPE>ERROR</RECORD_TYPE>
</SellOutRecord>
</root>