【发布时间】:2012-10-01 07:57:19
【问题描述】:
我有以下示例 xml 数据。我需要在多个级别对元素和数据进行排序。
1. 排序必须发生在像<InventoryRecord><SalesInRecord><SellOutRecord>这样的根级别之下
2. 必须对字段名称上的每个 <InventoryRecord> 或 <SalesInRecord> 或 <SellOutRecord> 中的所有元素进行排序
3. 无论记录集类型如何,都必须对每个记录集中<LOCATION_ID><LOCATION_ID_DB><LOCATION_NAME> 字段中的数据进行排序。
这里重要的是,对于某些记录,<LOCATION_ID> 元素可能不可用。
在这种情况下,排序应该只发生在 <LOCATION_ID_DB><LOCATION_NAME> 值上。
<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>
预期的输出是。
<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>
【问题讨论】: