2012-09-17 38 views
1

如何在特定節點值爲ERROR時對唯一值進行計數。以下是xml源文件。有不同的數據集等售完,塞林和庫存但 我想要具有用於RECORD_TYPE = ERROR的唯一記錄計數而不管數據組類型的使用XSLT的特定節點值的唯一記錄計數

<SellOutErrorRecord> 
    <RECORD_TYPE>WARNING</RECORD_TYPE> 
    <ERROR_DESC>record 1:location id is invalid</ERROR_DESC> 
    <RECORD_NO>1</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    <PRODUCT_NUMBER>336549R-001</PRODUCT_NUMBER> 
    <PRODUCT_OPTION>0D1</PRODUCT_OPTION> 
    <PRODUCT_LINE>LA</PRODUCT_LINE> 
</SellOutErrorRecord> 
<SalesInErrorRecord> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <ERROR_DESC>record 1:location id is invalid</ERROR_DESC> 
    <RECORD_NO>1</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    <PRODUCT_NUMBER>336549R-001</PRODUCT_NUMBER> 
    <PRODUCT_OPTION>0D1</PRODUCT_OPTION> 
    <PRODUCT_LINE>LA</PRODUCT_LINE> 
    <PRODUCT_LINE_TYPE>C</PRODUCT_LINE_TYPE> 
</SalesInErrorRecord> 
<SellOutErrorRecord> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <ERROR_DESC>record 2:SO:invoiced net amount is invalid</ERROR_DESC> 
    <RECORD_NO>2</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    <PRODUCT_NUMBER>3X-KN73C-DB</PRODUCT_NUMBER> 
    <PRODUCT_OPTION>0D1</PRODUCT_OPTION> 
    <PRODUCT_LINE>HA</PRODUCT_LINE> 
    <PRODUCT_LINE_TYPE>E</PRODUCT_LINE_TYPE> 
</SellOutErrorRecord> 
<SellOutErrorRecord> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <ERROR_DESC>record 3:SO:transaction currency is invalid</ERROR_DESC> 
    <RECORD_NO>3</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    <PRODUCT_NUMBER>339112-B25</PRODUCT_NUMBER> 
    <PRODUCT_OPTION>0D1</PRODUCT_OPTION> 
    <PRODUCT_LINE>J3</PRODUCT_LINE> 
    <PRODUCT_LINE_TYPE>E</PRODUCT_LINE_TYPE> 
</SellOutErrorRecord> 
<SalesInErrorRecord> 
    <RECORD_TYPE>WARNING</RECORD_TYPE> 
    <ERROR_DESC>record 3:SI:buy quantity is zero</ERROR_DESC> 
    <RECORD_NO>3</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    <PRODUCT_NUMBER>339112-B25</PRODUCT_NUMBER> 
    <PRODUCT_OPTION>0D1</PRODUCT_OPTION> 
    <PRODUCT_LINE>J3</PRODUCT_LINE> 
    <PRODUCT_LINE_TYPE>E</PRODUCT_LINE_TYPE> 
</SalesInErrorRecord> 
<SalesInErrorRecord> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <ERROR_DESC>record 3:SI:transaction document id is invalid</ERROR_DESC> 
    <RECORD_NO>3</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    <PRODUCT_NUMBER>339112-B25</PRODUCT_NUMBER> 
    <PRODUCT_OPTION>0D1</PRODUCT_OPTION> 
    <PRODUCT_LINE>J3</PRODUCT_LINE> 
    <PRODUCT_LINE_TYPE>E</PRODUCT_LINE_TYPE> 
</SalesInErrorRecord> 
<SellOutErrorRecord> 
    <RECORD_TYPE>WARNING</RECORD_TYPE> 
    <ERROR_DESC>record 4:SO:invoiced net amount is invalid</ERROR_DESC> 
    <RECORD_NO>4</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    <PRODUCT_NUMBER>445860-B21</PRODUCT_NUMBER> 
    <PRODUCT_OPTION>0D1</PRODUCT_OPTION> 
    <PRODUCT_LINE>MV</PRODUCT_LINE> 
    <PRODUCT_LINE_TYPE>C</PRODUCT_LINE_TYPE> 
</SellOutErrorRecord> 
<SalesInErrorRecord> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <ERROR_DESC>record 5:SI:transaction currency is null or invalid</ERROR_DESC> 
    <RECORD_NO>5</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    <PRODUCT_NUMBER>339112-B25</PRODUCT_NUMBER> 
    <PRODUCT_OPTION>0D1</PRODUCT_OPTION> 
    <PRODUCT_LINE>J3</PRODUCT_LINE> 
    <PRODUCT_LINE_TYPE>E</PRODUCT_LINE_TYPE> 
</SalesInErrorRecord> 
<InventoryErrorRecord> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <ERROR_DESC>record 6:product id is invalid</ERROR_DESC> 
    <RECORD_NO>6</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    <PRODUCT_NUMBER>331184-B21</PRODUCT_NUMBER> 
    <PRODUCT_OPTION>0S1</PRODUCT_OPTION> 
    <PRODUCT_LINE>R8</PRODUCT_LINE> 
    <PRODUCT_LINE_TYPE>E</PRODUCT_LINE_TYPE> 
</InventoryErrorRecord> 
<SellOutErrorRecord> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <ERROR_DESC>record 6:SO:invoiced net amount is invalid</ERROR_DESC> 
    <RECORD_NO>6</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    <PRODUCT_NUMBER>339112-B25</PRODUCT_NUMBER> 
    <PRODUCT_OPTION>0D1</PRODUCT_OPTION> 
    <PRODUCT_LINE>J3</PRODUCT_LINE> 
    <PRODUCT_LINE_TYPE>E</PRODUCT_LINE_TYPE> 
</SellOutErrorRecord> 

的輸出具有爲record_count = 5。 感謝您的幫助...

+0

您是否知道您是否可以使用xslt 2.0? v1.0沒有'distinct-values' – StuartLC

回答

0

在XSLT 1.0中,區別在於non intuitive。我假定根節點是xml,而記錄唯一的是RECORD_NO

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" indent="no"/> 

    <xsl:template match="/xml"> 
     record_count=<xsl:value-of select="count(*[RECORD_TYPE='ERROR' and not(following::*[RECORD_TYPE='ERROR']/RECORD_NO/text() = RECORD_NO/text())])" /> 
    </xsl:template> 
</xsl:stylesheet> 
+1

很好。迄今爲止工作良好..謝謝... – user1658369

相關問題