您好,我正在尝试返回一个基于以下输入示例的表:
<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>
我遇到的问题是,如果表是空的,那么我不能阻止创建它,当我确定它是否包含合法的行时,再添加表名就太晚了
发布于 2012-05-23 06:08:53
您可以在表级上移该选项,并检查它是否包含单元格
<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构建复杂的条件,这些条件在数据树中向前看(或其他方向)。您不仅限于当前节点和属性
https://stackoverflow.com/questions/10712831
复制相似问题