2015-01-08 13 views
5

Trong mã dưới đây, tôi áp dụng tất cả các mẫu cho chương phần tử (ở cuối mã) nhưng tôi muốn biết cách áp dụng tất cả các mẫu cho phần tử này ngoại trừ một phần tử spefic. Trong trường hợp này, nó là tiêu đề phần tử bởi vì tôi đã chọn nó trong dòng trước và nó xuất hiện lặp đi lặp lại trong tệp html. Người nào?Làm cách nào để áp dụng các mẫu cho tất cả các mẫu ngoại trừ một khuôn mẫu bất thường

<xsl:template match="chapter"> 
    <h3> 
     <a name="{@id}"><xsl:value-of select="title"/></a> 
    </h3> 
    <xsl:apply-templates/> 
</xsl:template> 

Output:

<h3>Title</h3> 
Title<br> 
Text. 

Trả lời

11

Một đồng bằng <xsl:apply-templates/> tương đương với <xsl:apply-templates select="node()" />, ví dụ: tất cả các nút con. Bạn có thể loại trừ các nút nhất định bằng cách sử dụng XPath 2.0 except operator, ví dụ:

<xsl:apply-templates select="node() except title" /> 

này sẽ chọn tất cả các nút con trừ những người là những yếu tố với tên title. Nếu bạn chỉ quan tâm đến các yếu tố con (không phải là nút văn bản, v.v.) thì bạn có thể sử dụng * except title để thay thế.

Toán tử except về cơ bản thực hiện sự khác biệt được đặt - bạn không bị giới hạn ở các tên phần tử đơn giản ở bên phải, bạn có thể sử dụng bất kỳ biểu thức nào trả về một chuỗi các nút, ví dụ:

node() except (title | div[@class = 'heading']) 

X except Y chọn tất cả các nút có trong chuỗi bởi Xchọn và không còn ở trình tự lựa chọn bởi Y

Các vấn đề liên quan