2015-12-10 3 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> 

От Row 2 Onwards нам нужно проверить по-меньшей мере любом из элемента в столбце кода и соседний пустой столбец должен иметь значение. Если какая-либо одна строка имеет значение, мы должны преобразовать таблицу, как указано в Sample Output1: (Положительный случай). ie) Название таблицы должно быть изменено на XYZ и объединить всю ячейку с ячейкой элемента для столбца Code и соседнего пустого столбца.

Образец Input1: (положительный случай)

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

Образец Output1: (положительный случай)

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

Если все строки имеет пустое значение в любом одном столбце, то мы ничего не делаем.

Образец Input2: (Negative случай)

<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]/Элемент [номер (нормализуют-пространство (.)) и number (normalize-space (.))> 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

Спасибо за ответ. Поскольку мы используем компонент diiffrent для XSL в нашем приложении, мы использовали часть вашего ответа, который работал. Спасибо за вашу помощь. – ThirumalMarugan

Смежные вопросы