2010-02-03 3 views
12

Мне нужно создать XSL, который проверяет условие «не содержит». Например, мой XML, как это:XSLT: не содержит проверку

<Categories> 
    <category> 
    <blog>ABC</blog> 
    <link>http://www.msdn.com</link> 
    </category> 
</Categories> 

Я хочу, чтобы показать каждый <blog> где <link> не содержит "msdn". Я не хочу использовать equals, потому что просто хочу проверить часть ссылки.

ответ

29

Я не уверен, что именно выход HTML вы хотите , но, надеюсь, это поможет вам начать.

<xsl:template match="category"> 
    <xsl:if test="not(contains(link, 'msdn'))"> 
     <a href="{link}"> 
      <xsl:value-of select="blog" /> 
     </a> 
    </xsl:if> 
</xsl:template> 

Вы также могли бы включать проверку в матче шаблон (или применить-шаблоны выбора) предикат, как это:

<xsl:template match="category[not(contains(link, 'msdn'))]"> 
+1

Я бы, вероятно, проверил на 'not (start-with (substring-after (link, ': //'), 'www .msdn.com ')) ', чтобы сделать матч однозначным. – Tomalak

+0

yup its working fine спасибо ... – TSSS22

+0

У вас есть идеи, как проверить, что нет (содержит()) count is zero – TSSS22

1

Используйте функцию not с функцией contains.

Пример: нет (содержит ('XML', 'XM'))

Результат: ложные

http://www.w3schools.com/Xpath/xpath_functions.asp

+0

Спасибо за ответ он решается мой prblem, но вы можете сказать мне, что я хочу, чтобы отобразить Сообща как запись не найдено, когда счетчик равен 0 для не (содержит (ссылку, MSDN)) .... как для достижения этого – TSSS22

+0

см. поскольку это действительно независимый вопрос, вы должны создать для него новую должность. –

+0

проверить это: http://www.stylusstudio.com/w3c/xslt/message.htm –

0

Xpath для XSL: применять-шаблоны или XSL: стоимость от должен содержите следующие

/Categories/category/blog[not(contains(following-sibling::link/text(), 'msdn'))] 
Смежные вопросы