2010-02-03 22 views
12

Tôi cần tạo XSL để kiểm tra điều kiện "không chứa". Ví dụ, XML của tôi là như thế này:XSLT: không chứa séc

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

Tôi muốn hiển thị mỗi <blog> nơi <link> không chứa "msdn". Tôi không muốn sử dụng bằng vì tôi chỉ muốn kiểm tra một phần của liên kết.

Trả lời

29

Tôi không chắc chắn chính xác những gì đầu ra HTML bạn muốn , nhưng hy vọng điều này có thể giúp bạn bắt đầu.

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

Bạn cũng có thể bao gồm các bài kiểm tra trong template match (hoặc apply-templates chọn) vị như thế này:

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

Tôi có thể sẽ kiểm tra 'không (bắt đầu bằng (chuỗi con sau (liên kết, ': //'), 'www .msdn.com ')) ', để làm cho trận đấu không rõ ràng. – Tomalak

+0

yup làm việc tốt nhờ của nó ... – TSSS22

+0

Bạn có bất kỳ ý tưởng làm thế nào để kiểm tra rằng không (contains()) đếm là số không – TSSS22

1

Sử dụng chức năng không có chức năng chứa.

Ví dụ: không (chứa ('XML', 'XM'))

Kết quả: false

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

+0

Cảm ơn bạn đã trả lời nó đã giải quyết nguyên mẫu của tôi nhưng bạn có thể cho tôi biết tôi muốn hiển thị msg như bản ghi không tìm thấy khi đếm là 0 không (chứa (liên kết, msdn)) .... để đạt được điều này – TSSS22

+0

xem vì đây thực sự là một câu hỏi độc lập, bạn nên tạo một bài đăng mới cho nó. –

+0

kiểm tra điều này: http://www.stylusstudio.com/w3c/xslt/message.htm –

0

XPath cho xsl: apply-templates hoặc xsl: value-of nên chứa sau

/Categories/category/blog[not(contains(following-sibling::link/text(), 'msdn'))] 
Các vấn đề liên quan