2012-09-17 2 views
1

특정 노드 값이 ERROR 인 경우 고유 값을 계산하는 방법. 아래는 XML 소스입니다. 배신, 파는 및 재고하지만 등이 다른 데이터 세트 나 출력 = 5 record_count이어야 관계없이 데이터 세트 형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_TYPE = ERROR 대한 고유 한 레코드의 개수를 원한다. 당신의 도움에 감사드립니다 ...

+0

xslt 2.0을 사용할 수 있는지 여부를 알고 있습니까? v1.0에는 '고유 값'이 없습니다. – 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

관련 문제