2012-10-01 228 views
0

我有下面的示例xml数据。我需要在多个层次上对元素和数据进行排序。 1.排序已到在刚好低于根级别等<InventoryRecord><SalesInRecord><SellOutRecord> 2.排序被happend必须被happend用于在字段的每个<InventoryRecord><SalesInRecord><SellOutRecord>所有元素命名 3.排序在<LOCATION_ID><LOCATION_ID_DB><LOCATION_NAME>上的数据被happend无论记录集类型如何,每个记录集中的字段。 这里重要的是,对于某些记录<LOCATION_ID>元素可能不可用。 在这种情况下,只应在<LOCATION_ID_DB><LOCATION_NAME>值上进行排序。使用XSLT对XML元素进行排序并对数据进行排序

<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> 

回答

1

是否

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

<xsl:strip-space elements="*"/> 
<xsl:output indent="yes"/> 

<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="root"> 
    <xsl:copy> 
    <xsl:apply-templates select="*"> 
     <xsl:sort select="local-name()"/> 
     <xsl:sort select="LOCATION_ID"/> 
     <xsl:sort select="LOCATION_ID_DB"/> 
     <xsl:sort select="LOCATION_NAME"/> 
    </xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="SalesInRecord | SellOutRecord | InventoryRecord"> 
    <xsl:copy> 
    <xsl:apply-templates select="*"> 
     <xsl:sort select="local-name()"/> 
    </xsl:apply-templates> 
    </xsl:copy> 
</xsl:template> 


</xsl:stylesheet> 

你想要做什么?我认为它会生成您为发布的输入发布的输出。