我有一个下面的场景。我需要下面的xpath: 我们有一个表格,其中包含名称,代码和行为。 我们也可能没有代码旁边的空白列。它可以是任何数字。 但表格以姓名开头,以行为结束。
1) <Row>
<Cell><Element>Name</Element></Cell>
<Cell><Element>Code</Element></Cell>
<Cell><Element>Conduct</Element></Cell>
</Row>
2)<Row>
<Cell><Element>Name</Element></Cell>
<Cell><Element>Code</Element></Cell>
<Cell><Element></Element></Cell>
<Cell><Element>Conduct</Element></Cell>
</Row>
3) <Row>
<Cell><Element>Name</Element></Cell>
<Cell><Element>Code</Element></Cell>
<Cell><Element></Element></Cell>
<Cell><Element></Element></Cell>
<Cell><Element>Conduct</Element></Cell>
</Row>
Tbody的第一行应该在所有列中都有值。主要在Code和Empty thead列中。 Cell也可能包含内部元素Element1。
ex 1) <Row>
<Cell><Element>abc</Element></Cell>
<Cell><Element>23</Element></Cell>
<Cell><Element>Good</Element></Cell>
</Row>
ex 2)<Row>
<Cell><Element>ttt</Element></Cell>
<Cell><Element>34</Element></Cell>
<Cell><Element>45</Element></Cell>
<Cell><Element>good</Element></Cell>
</Row>
ex 3) <Row>
<Cell><Element>yyy</Element></Cell>
<Cell><Element>22</Element></Cell>
<Cell><Element>33</Element></Cell>
<Cell><Element><Element1>4</Element1>4</Element></Cell>
<Cell><Element>Conduct</Element></Cell>
</Row>
从第2行开始,我们需要至少检查代码列中的任何一个元素,并且相邻的空列应该具有值。 如果任何一行有值,那么我们应该按照Sample Output1中的说明转换表:(正例)。 ie)表名应改为XYZ,并为Code列和相邻的空列组合所有元素insed单元格。
<Table Name="abc">
<Thead>
<Row>
<Cell><Element>Name</Element></Cell>
<Cell><Element>Code</Element></Cell>
<Cell><Element></Element></Cell>
<Cell><Element>Conduct</Element></Cell>
</Row>
</Thead>
<Tbody>
<Row>
<Cell><Element>Sam</Element></Cell>
<Cell><Element>1</Element><Element>2</Element><Element>1</Element></Cell>
<Cell><Element>1</Element><Element></Element><Element>1</Element></Cell>
<Cell><Element>Good</Element></Cell>
</Row>
<Row>
<Cell><Element>xyz</Element></Cell>
<Cell><Element>123</Element></Cell>
<Cell><Element></Element><Element></Element><Element><Element1>1<Element1></Element></Cell>
<Cell><Element>Good</Element></Cell>
</Row>
</Tbody>
</Table>
<Table Name="XYZ">
<Thead>
<Row>
<Cell><Element>Name</Element></Cell>
<Cell><Element>Code</Element></Cell>
<Cell><Element></Element></Cell>
<Cell><Element>Conduct</Element></Cell>
</Row>
</Thead>
<Tbody>
<Row>
<Cell><Element>Sam</Element></Cell>
<Cell><Element>121</Element></Cell>
<Cell><Element>11</Element></Cell>
<Cell><Element>Good</Element></Cell>
</Row>
<Row>
<Cell><Element>TTT</Element></Cell>
<Cell><Element>123</Element></Cell>
<Cell><Element>1</Element></Cell>
<Cell><Element>Good</Element></Cell>
</Row>
<Row>
<Cell><Element>PPP</Element></Cell>
<Cell><Element>123</Element></Cell>
<Cell><Element>1</Element></Cell>
<Cell><Element>Good</Element></Cell>
</Row>
</Tbody>
</Table>
如果所有行在任何一列中都有空值,那么我们什么都不做。
<Table Name="abc">
<Thead>
<Row>
<Cell><Element>Name</Element></Cell>
<Cell><Element>Code</Element></Cell>
<Cell><Element></Element></Cell>
<Cell><Element>Conduct</Element></Cell>
</Row>
</Thead>
<Tbody>
<Row>
<Cell><Element>Sam</Element></Cell>
<Cell><Element>1</Element><Element>2</Element><Element>3</Element></Cell>
<Cell><Element></Element><Element></Element><Element></Element></Cell>
<Cell><Element>Good</Element></Cell>
</Row>
<Row>
<Cell><Element>xyz</Element></Cell>
<Cell><Element>123</Element></Cell>
<Cell><Element></Element><Element></Element><Element><Element1><Element1></Element></Cell>
<Cell><Element>Good</Element></Cell>
</Row>
</Tbody>
</Table>
Sample Output2:(Negative case)
same as input.
我们尝试了什么:
count(Tbody //行[count(./ Cell [2] / Element [number(normalize-space(。))和number(normalize-space(。))&gt; 0])!= 0])
这项工作仅针对“唯一代码”列,但我们不知道将会有多少辅助空列。对于这种情况,我们需要知道xpath。
答案 0 :(得分:1)
你的描述很难理解,我在这里主要猜测。以下测试是否可以帮助您区分这两种情况?
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="Table">
<xsl:choose>
<xsl:when test="Tbody/Row[position() > 1]/Cell[position() > 2 and position() != last()][.//text()]">POSITIVE</xsl:when>
<xsl:otherwise>NEGATIVE</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
这样做是从第2行开始查看正文的每一行,并查看任何单元格中是否有值,从单元格#3开始,到最后一个单元格之前的单元格结束。如果找到任何这样的细胞,结果是积极的。