Тест на пустоту узла - PullRequest
       2

Тест на пустоту узла

2 голосов
/ 14 октября 2011

У меня есть следующие два узла xml:

<CELL ROWSPAN="1" COLSPAN="3">
  <TableBodyCenterBold>
    <A ID="pgfId-179932"/>
  </TableBodyCenterBold>
</CELL>

<CELL ROWSPAN="1" COLSPAN="6">
  <TableBodyCenterBold>
    <A ID="pgfId-179938"/>
    Body Tensile Capacity (lb)
  </TableBodyCenterBold>
</CELL>

Очевидно, первый узел <CELL> отличается от второго <CELL> тем, что <TableBodyCenterBold> первого не имеет никакихtext.

Я пробовал следующий XPath, но все не удалось:

<xsl:when test="string-length(CELL[1]/TableBodyCenterBold[1]/text()) &gt; 0">

или

<xsl:when test="CELL[1]/TableBodyCenterBold[1]/text()!=''">

Могут ли эксперты предложить некоторую помощь по эффективной дифференциации первогоузел со второго?

Ответы [ 3 ]

2 голосов
/ 16 октября 2011

Необходимо принять во внимание существующий пробел - только дочерние узлы текстового узла из TableBodyCenterBold.

Правильное выражение, которое проверяет на "пустоту" и игнорируетТекстовые узлы только для пробелов: :

CELL[1]/TableBodyCenterBold[1][not(string-length(normalize-space()) > 0)] 

Это дает значение true(), когда первый TableBodyCenterBold дочерний элемент первого CELL дочернего элемента текущего узла имеет строковое значение,который при нормализации приводит к пустой строке.

1 голос
/ 15 октября 2011

Ответ Краковера - правильная идея, но я полагаю, что он ошибочно включил шаг проверки узла A.Я полагаю, что вы вместо этого ищете:

CELL[1]/TableBodyCenterBold[not(text())]

Текст в вашем примере находится внутри элемента TableBodyCenterBold, а не элемента A.

Кроме того, поскольку это относительныйXPath (он не начинается с /), вы можете перепроверить, что этот XPath оценивается относительно ожидаемого узла контекста.

1 голос
/ 14 октября 2011

Попробуйте

CELL[1]/TableBodyCenterBold[1]/A[not(text())]

или

CELL[1]/TableBodyCenterBold/A[not(node())]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...