0

こんにちは私は次の入力のサンプルに基づいてテーブルを返そうとしています:

<Table TableLevel="1" TableNumber="1" TableTitle="">
  <TableRow TableRowLevel="1" RowTitle="" TableRowNumber="1" class="Even">
    <TableHeader width="33" class="tableheadercell">
      <Paragraph>Account Name</Paragraph>
    </TableHeader>
    <TableHeader width="10" class="tableheadercell">
      <Paragraph>Type</Paragraph>
    </TableHeader>
    <TableHeader width="57" class="tableheadercell">
      <Paragraph>Additional Information</Paragraph>
    </TableHeader>
  </TableRow>
  <TableRow TableRowLevel="1" RowTitle="" TableRowNumber="2" class="OddLegacy">
    <TableCell>
      <Paragraph>ANONYMOUS LOGON</Paragraph>
    </TableCell>
    <TableCell>
      <Paragraph>Group</Paragraph>
    </TableCell>
    <TableCell>
      <UnorderedList UnorderedListLevel="1" class="compactList" UnorderedListNumber="1">
        <ListItem>comment: ANONYMOUS LOGON</ListItem>
        <ListItem>group-id: 7</ListItem>
      </UnorderedList>
    </TableCell>
  </TableRow>
  <TableRow TableRowLevel="1" RowTitle="" TableRowNumber="3" class="Even">
    <TableCell>
      <Paragraph>Administrators</Paragraph>
    </TableCell>
    <TableCell>
      <Paragraph>Group</Paragraph>
    </TableCell>
    <TableCell>
      <UnorderedList UnorderedListLevel="1" class="compactList" UnorderedListNumber="1">
        <ListItem>group-id: 544</ListItem>
      </UnorderedList>
    </TableCell>
  </TableRow>
</Table>

次に、私のXSLT:

<xsl:variable name="whiteuserxml">
    <item>ANONYMOUS LOGON</item>
</xsl:variable>
<xsl:for-each select="Table">
    <table>
    <xsl:for-each select="TableRow[not(TableCell/Paragraph = $whiteuserxml/item)]">
        <xsl:choose>
        <xsl:when test="count(TableCell) = 0"/>
        <xsl:otherwise>
            <tr>
            <xsl:for-each select="TableHeader">
                <td><b><xsl:apply-templates select="*"/></b></td>
            </xsl:for-each>
            <xsl:for-each select="TableCell">
                        <td><xsl:apply-templates select="*"/></td>
            </xsl:for-each>
               </tr>
        </xsl:otherwise>
        </xsl:choose>
    </xsl:for-each>
    </table>
</xsl:for-each>

必要な出力:

<table>
    <tr>
        <td>Administrators</td><td>Group</td><td>the other stufflist</td>
    </tr>
</table>

私が抱えている問題は、テーブルが空になった場合にテーブルが作成されるのを防ぐことができず、テーブルに正当な行が含まれているかどうかを判断するまでに、テーブル名を追加するには遅すぎるということです。

4

1 に答える 1

0

その選択をテーブルレベルで上に移動して、セルが含まれているかどうかを確認できます

<xsl:when test="count(TableRow/TableCell) = 0"/>

レビュー:わかりました。「ホワイトリスト」の条件で、条件を上に移動します

<xsl:for-each select="Table[count(TableRow[not(TableCell/Paragraph = $whiteuserxml/item)]/TableCell)=0]">...
</xsl:when>

内側のループで再度フィルタリングする必要があります。

重要なのは、データツリーで先を見越した(または他の方向)xslt/xpathを使用して複雑な条件を構築できるということです。現在のノードと属性に制限されません

于 2012-05-23T06:08:52.540 に答える