0

以下の xml データがあり、 XSLT を介してrecord_type=VALIDの場合にレコード数を取得する必要があります。location_name と file_type は xslt への入力です。入力として提供された場合、location_name と file_type ごとにレコード数を取得する必要があります。Location_NameFile_Typeは、XSLT の変数です。

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

予想される出力は、location_name=XYZ el および File_type=STOSO の場合は Rec_count=2 です location_name=XYZ XYZ および File_type=STOSO の場合は Rec_count=3

ありがとう...

4

1 に答える 1

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>

2つのXPath式を評価し、この評価の結果を出力にコピーします。

2, 3
于 2012-09-30T13:34:36.640 に答える