2014-01-08 5 views
3

У меня есть файл XML с этой структурой:Как проверить, пуст ли текстовый узел?

<entry id="1"> 
    <para>first paragraph</para> 
    <para>second paragraph</para> 
</entry> 
<entry id="2"> 
    <para></para> 
</entry> 

Мой XSL должен сделать что-то, если он находит запись содержит первый элемент, текстовый узел пуст (запись ID = «2» в примере). Я пробовал:

<xsl:when test="(entry/para[1]/text()='')"> 

но это не работает.

Подобный фрагмент кода, чтобы прочитать атрибут элемента делает работу:

<xsl:when test="entry[1]/para[@stylename = 'Table Heading']"> 

Так что я делаю что-то неправильно с текстом() = «» выбора. Поиск предполагает, что я должен использовать [not (text())], но я не могу понять, как интегрировать это в свой код.

ответ

5

text()='' требует наличия текстового узла, но в случае <para></para> нет соответствующего текстового узла.

Итак, я хотел бы предложить что-то вроде

entry/para[1][.=''] 

или

entry/para[1][not(text())] 
+2

Да, за исключением того, что тест должен быть истинным тогда и только тогда «он находит запись [что] имеет ** первый ** элемент с текстовым узлом ... ". BTW, поздравляет с тем, что имеет 1000 пп. – LarsH

+1

@LarsH Не заметил 1000π! Псих ;-). Спасибо за подсказку, я отредактирую ответ. –

+0

Быстро, кто-то занижал некоторые из моих ответов, я превысил 1000 п;) –

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