2013-09-03 4 views
0

Я унаследовал проект преобразования XSLT, и это мой первый опыт использования этой технологии. Скажем, у меня есть этот XML:Как проверить, имеет ли элемент XML определенный атрибут с XSLT

<report> 
    <data> 
     <group> 
      <row> 
       <cell email="true"> 
        <stuff>[email protected]</stuff> 
       </cell> 
       <cell> 
        <stuff>Not an email</stuff> 
       </cell> 
      </row> 
     </group> 
    </data> 
</report> 

Как я могу проверить в XSLT, чтобы увидеть, если ячейка имеет атрибут электронной почты и/или если атрибут он установлен?

+0

Я знаю, что это не XSLT, а .. Вы можете сделать с xpath. Запрос «// data/group/row/cell [@ email = 'true']" должен возвращать узлы ячейки, у которых есть атрибут email = "true". – user1759572

+0

Структура xml является dymanic, так что это не сработает. Я внутри цикла для каждого элемента ячейки, который всегда будет там – Crobzilla

+0

Затем попробуйте «// cell [@ email = 'true']" query – user1759572

ответ

1

попробовать

//cell[@email] 

для XPATH expresssion. использовать его в качестве шаблона в шаблоне, который будет содержать некоторые инструкции, как ...

<xsl:if test=".[@email]"> 
    <!-- structures to generate/further processing --> 
</xsl:if> 

или

<xsl:if test=".[@email = 'true']"> 
    <!-- structures to generate/further processing --> 
</xsl:if> 

тестовое выражение может также содержать шаблон, как один из комментария user1759572 - он все dependes в контексте, где вы собираетесь выполнить свой тест и какой результат преобразования вы хотите получить.

+0

То, что вы предложили, ничем не отличается от 'test = @email ", и имейте в виду, что'.. [@ email] "' поддерживается только в XSLT 2.0. Эквивалентом в XSLT 1.0 является '' self :: node [@email] "', но совершенно ненужный в 'test =', так как 'test =" @ email "' то же самое. –

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