2015-12-10 29 views
0

我有一个下面的场景。我需要下面的xpath: 我们有一个包含名称,代码和行为的表格。 我们也可能没有代码旁边的空白栏。它可能是任何数字。 但是表格以名称开头并以行为结束。需要XPath:检查特定列的每一行内的值

THEAD例如:

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的第一行应该在所有column.Mainly在代码值和空THEAD列。 另外单元格可能包含内部元素Element1。

TBODY第一行例如:

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开始,我们需要检查在-至少在代码列中的任意一种元素和相邻的空柱应该具有的值。 如果任何一行有值,那么我们应该按照示例输出1中所述转换表(正例)。 ie)表格名称应改为XYZ,并为代码列和相邻的空列组合所有元素进入的单元格进行组合。

样品输入1:(正时)

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

采样输出1:(正时)

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

如果所有的行具有在任何一列空值,那么我们什么也不做。

样品输入2:(否定的情况下)

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

我们尝试:

计数(TBODY //行[计数(./细胞[2] /元素[数(正常化空间( 。))和数字(规格化空间(。))> 0])!= 0])

这项工作仅适用于代码列,但我们不知道有多少个仲裁空列会出现。我们需要知道xpath。

+0

http://stackoverflow.com/help/someone-answers –

回答

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和最后一个之前在小区结束。如果找到这样的细胞,结果是肯定的。

+0

感谢您的答复。由于我们在我们的应用程序中使用了XSL的diiffrent组件,因此我们使用了其中一部分工作的答案。谢谢你的帮助。 – ThirumalMarugan

相关问题