2012-09-30 46 views
0

我有下面的xml數據,需要通過XSLT獲取記錄數時record_type = VALID。 location_name和file_type是xslt的輸入。當他們作爲輸入提供時,我必須獲得每個location_name和file_type的記錄數。 位置_名稱File_Type是XSLT中的變量。需要通過XSLT獲得record_type = VALID時的記錄計數

<root> 
<SellOutRecord> 
    <FILE_TYPE>STOSO</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>1</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</SellOutRecord> 
<SellOutRecord> 
    <FILE_TYPE>STOSO</FILE_TYPE> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <RECORD_NO>2</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</SellOutRecord> 
<SellOutRecord> 
    <FILE_TYPE>STOSO</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>3</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</SellOutRecord> 
<SellOutRecord> 
    <FILE_TYPE>STOSO</FILE_TYPE> 
    <RECORD_TYPE>WARNING</RECORD_TYPE> 
    <RECORD_NO>3</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</SellOutRecord> 
<SellOutRecord> 
    <FILE_TYPE>STOSO</FILE_TYPE> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <RECORD_NO>4</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</SellOutRecord> 
<SellOutRecord> 
    <FILE_TYPE>STOSO</FILE_TYPE> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <RECORD_NO>6</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</SellOutRecord> 
<SellOutRecord> 
    <FILE_TYPE>STOSO</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>7</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</SellOutRecord> 
<SellOutRecord> 
    <FILE_TYPE>STOSO</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>8</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</SellOutRecord> 
<SellOutRecord> 
    <FILE_TYPE>STOSO</FILE_TYPE> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <RECORD_NO>9</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</SellOutRecord> 
<SellOutRecord> 
    <FILE_TYPE>STOSO</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>10</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</SellOutRecord> 
<InventoryRecord> 
    <FILE_TYPE>STOIV</FILE_TYPE> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <RECORD_NO>2</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</InventoryRecord> 
<InventoryRecord> 
    <FILE_TYPE>STOIV</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>4</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</InventoryRecord> 
<InventoryRecord> 
    <FILE_TYPE>STOIV</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>5</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</InventoryRecord> 
<InventoryRecord> 
    <FILE_TYPE>STOIV</FILE_TYPE> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <RECORD_NO>8</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</InventoryRecord> 
<InventoryRecord> 
    <FILE_TYPE>STOIV</FILE_TYPE> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <RECORD_NO>9</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</InventoryRecord> 
<InventoryRecord> 
    <FILE_TYPE>STOIV</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>11</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</InventoryRecord> 
<InventoryRecord> 
    <FILE_TYPE>STOIV</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>14</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</InventoryRecord> 
<SalesInRecord> 
    <FILE_TYPE>STOSI</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>1</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</SalesInRecord> 
<SalesInRecord> 
    <FILE_TYPE>STOSI</FILE_TYPE> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <RECORD_NO>2</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</SalesInRecord> 
<SalesInRecord> 
    <FILE_TYPE>STOSI</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>3</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</SalesInRecord> 
<SalesInRecord> 
    <FILE_TYPE>STOSI</FILE_TYPE> 
    <RECORD_TYPE>WARNING</RECORD_TYPE> 
    <RECORD_NO>3</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</SalesInRecord> 
<SalesInRecord> 
    <FILE_TYPE>STOSI</FILE_TYPE> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <RECORD_NO>4</RECORD_NO> 
    <LOCATION_NAME>XYZ el</LOCATION_NAME> 
</SalesInRecord> 
<SalesInRecord> 
    <FILE_TYPE>STOSI</FILE_TYPE> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <RECORD_NO>7</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</SalesInRecord> 
<SalesInRecord> 
    <FILE_TYPE>STOSI</FILE_TYPE> 
    <RECORD_TYPE>VALID</RECORD_TYPE> 
    <RECORD_NO>8</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</SalesInRecord> 
<SalesInRecord> 
    <FILE_TYPE>STOSI</FILE_TYPE> 
    <RECORD_TYPE>WARNING</RECORD_TYPE> 
    <RECORD_NO>8</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</SalesInRecord> 
<SalesInRecord> 
    <FILE_TYPE>STOSI</FILE_TYPE> 
    <RECORD_TYPE>ERROR</RECORD_TYPE> 
    <RECORD_NO>10</RECORD_NO> 
    <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
</SalesInRecord> 
</root> 

期望輸出是Rec_count = 2 LOCATION_NAME = XYZ e1和FILE_TYPE = STOSO Rec_count = 3 LOCATION_NAME = XYZ XYZ和FILE_TYPE = STOSO

謝謝...

回答

1

的通緝XPath表達式是

count(/*/* 
     [RECORD_TYPE='VALID' and LOCATION_NAME=$pLoc1 and FILE_TYPE=$pFType]) 

count(/*/* 
     [RECORD_TYPE='VALID' and LOCATION_NAME=$pLoc2 and FILE_TYPE=$pFType]) 

該轉化

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

<xsl:param name="pLoc1" select="'XYZ el'"/> 
<xsl:param name="pLoc2" select="'XYZ XYZ'"/> 
<xsl:param name="pFType" select="'STOSO'"/> 

<xsl:variable name="vCount1" select= 
    "count(/*/* 
     [RECORD_TYPE='VALID' and LOCATION_NAME=$pLoc1 and FILE_TYPE=$pFType])"/> 

<xsl:variable name="vCount2" select= 
    "count(/*/* 
     [RECORD_TYPE='VALID' and LOCATION_NAME=$pLoc2 and FILE_TYPE=$pFType])"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy-of select="concat($vCount1, ', ', $vCount2)"/> 
</xsl:template> 
</xsl:stylesheet> 

當所提供的XML文檔施加:

<root> 
    <SellOutRecord> 
     <FILE_TYPE>STOSO</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>1</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </SellOutRecord> 
    <SellOutRecord> 
     <FILE_TYPE>STOSO</FILE_TYPE> 
     <RECORD_TYPE>ERROR</RECORD_TYPE> 
     <RECORD_NO>2</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </SellOutRecord> 
    <SellOutRecord> 
     <FILE_TYPE>STOSO</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>3</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </SellOutRecord> 
    <SellOutRecord> 
     <FILE_TYPE>STOSO</FILE_TYPE> 
     <RECORD_TYPE>WARNING</RECORD_TYPE> 
     <RECORD_NO>3</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </SellOutRecord> 
    <SellOutRecord> 
     <FILE_TYPE>STOSO</FILE_TYPE> 
     <RECORD_TYPE>ERROR</RECORD_TYPE> 
     <RECORD_NO>4</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </SellOutRecord> 
    <SellOutRecord> 
     <FILE_TYPE>STOSO</FILE_TYPE> 
     <RECORD_TYPE>ERROR</RECORD_TYPE> 
     <RECORD_NO>6</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </SellOutRecord> 
    <SellOutRecord> 
     <FILE_TYPE>STOSO</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>7</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </SellOutRecord> 
    <SellOutRecord> 
     <FILE_TYPE>STOSO</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>8</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </SellOutRecord> 
    <SellOutRecord> 
     <FILE_TYPE>STOSO</FILE_TYPE> 
     <RECORD_TYPE>ERROR</RECORD_TYPE> 
     <RECORD_NO>9</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </SellOutRecord> 
    <SellOutRecord> 
     <FILE_TYPE>STOSO</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>10</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </SellOutRecord> 
    <InventoryRecord> 
     <FILE_TYPE>STOIV</FILE_TYPE> 
     <RECORD_TYPE>ERROR</RECORD_TYPE> 
     <RECORD_NO>2</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </InventoryRecord> 
    <InventoryRecord> 
     <FILE_TYPE>STOIV</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>4</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </InventoryRecord> 
    <InventoryRecord> 
     <FILE_TYPE>STOIV</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>5</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </InventoryRecord> 
    <InventoryRecord> 
     <FILE_TYPE>STOIV</FILE_TYPE> 
     <RECORD_TYPE>ERROR</RECORD_TYPE> 
     <RECORD_NO>8</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </InventoryRecord> 
    <InventoryRecord> 
     <FILE_TYPE>STOIV</FILE_TYPE> 
     <RECORD_TYPE>ERROR</RECORD_TYPE> 
     <RECORD_NO>9</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </InventoryRecord> 
    <InventoryRecord> 
     <FILE_TYPE>STOIV</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>11</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </InventoryRecord> 
    <InventoryRecord> 
     <FILE_TYPE>STOIV</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>14</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </InventoryRecord> 
    <SalesInRecord> 
     <FILE_TYPE>STOSI</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>1</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </SalesInRecord> 
    <SalesInRecord> 
     <FILE_TYPE>STOSI</FILE_TYPE> 
     <RECORD_TYPE>ERROR</RECORD_TYPE> 
     <RECORD_NO>2</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </SalesInRecord> 
    <SalesInRecord> 
     <FILE_TYPE>STOSI</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>3</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </SalesInRecord> 
    <SalesInRecord> 
     <FILE_TYPE>STOSI</FILE_TYPE> 
     <RECORD_TYPE>WARNING</RECORD_TYPE> 
     <RECORD_NO>3</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </SalesInRecord> 
    <SalesInRecord> 
     <FILE_TYPE>STOSI</FILE_TYPE> 
     <RECORD_TYPE>ERROR</RECORD_TYPE> 
     <RECORD_NO>4</RECORD_NO> 
     <LOCATION_NAME>XYZ el</LOCATION_NAME> 
    </SalesInRecord> 
    <SalesInRecord> 
     <FILE_TYPE>STOSI</FILE_TYPE> 
     <RECORD_TYPE>ERROR</RECORD_TYPE> 
     <RECORD_NO>7</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </SalesInRecord> 
    <SalesInRecord> 
     <FILE_TYPE>STOSI</FILE_TYPE> 
     <RECORD_TYPE>VALID</RECORD_TYPE> 
     <RECORD_NO>8</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </SalesInRecord> 
    <SalesInRecord> 
     <FILE_TYPE>STOSI</FILE_TYPE> 
     <RECORD_TYPE>WARNING</RECORD_TYPE> 
     <RECORD_NO>8</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </SalesInRecord> 
    <SalesInRecord> 
     <FILE_TYPE>STOSI</FILE_TYPE> 
     <RECORD_TYPE>ERROR</RECORD_TYPE> 
     <RECORD_NO>10</RECORD_NO> 
     <LOCATION_NAME>XYZ XYZ</LOCATION_NAME> 
    </SalesInRecord> 
</root> 

評估兩個XPath表達式,並複製到輸出的評估結果如下:

2, 3 
+0

上述XML數據只是一個示例。我想獲得location_name和file_type組合的計數,我將它們作爲輸入傳遞給xslt以獲取該組合的計數。 – user1658369

+0

@ user1658369,轉換完全是* *注意「輸入」值是外部(全局)參數。 –

+0

但輸入似乎已經啓動,但我想從其他來源傳遞他們在這種情況下,我會處理這些輸入從JDBC查詢(jdbc查詢將有一個location_name和file_type組合列表)到xslt,它應該處理計數只適用於該組合。我將在給定的時間只傳遞一個location_name和file_type以獲得該組合的計數,並且直到jdbc查詢組合結束纔是循環。對不起,如果我不能正確理解它。 – user1658369