2013-08-15 2 views

ответ

0

Если ДИВ речь идет текущий узел, и вы в настоящее время не знаю, имеет ли это идентификатор «кошки» или атрибут класса, то вы можете написать

<xsl:if test=".[@id='cat' and contains(@class,'true')]"> 
    YES 
</xsl:if> 

Если вы в шаблоне, который соответствует div[@id='cat'], вы можете использовать более простой тест test="contains(@class,'true')". (И наоборот.)

Обратите внимание, что тест как только что сформулированный будет успешным для divs с class="untrue" - если это проблема для вашей ситуации, решение становится немного грязнее.

В XSLT 1.0, самый простой способ, чтобы написать что-то вроде этого:

<xsl:if test=".[@id='cat' 
       and 
       contains(concat(' ', @class, ' '),' true ')]"> 
    YES 
</xsl:if> 

В XSLT 2.0, я бы написать что-то вроде:

<xsl:if test=".[@id='cat' 
       and 
       tokenize(@class, '\s') = 'true')]"> 
    YES 
</xsl:if> 
+0

"дивы с классом =" не соответствует действительности» "- беспорядочное решение состоит в том, чтобы добавить пробел до и после всей строки класса и проверить, содержит ли он' &32; true &32; '- то есть с пробелом до и после. (Обозначение '&32;', но вам нужно место здесь.) – usr2564301

+0

True; Я думал, что это сказал, но, возможно, я этого не сделал. –

+0

Гомер кивает. Конструкция 'test =. [@ Id = 'cat']" 'не разрешена в XPath 1.0, вероятно, как случайная ошибка в грамматике. Это не большая проблема, потому что ее можно записать как 'test =" @ id = 'cat' "'. Я думаю, что некоторые реализации позволяют синтаксис, даже если спецификация не работает. Это разрешено в версии 2.0. –

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