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 Rec_count=3 对于 location_name=XYZ XYZ 和 File_type=STOSO

谢谢...

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>

计算两个 XPath 表达式并将计算结果复制到输出:

2, 3
于 2012-09-30T13:34:36.640 回答