Tôi có một số mẫu khớp với các nút khác nhau trong tài liệu xml. Nếu tôi chỉ cần
< xsl: apply-templates /> , bằng cách nào đó, kết quả đầu ra đệ quy văn bản của tất cả các nút bên dưới. Tôi chỉ muốn nó đệ quy phù hợp với bất kỳ mẫu nào tôi đã xác định. Làm thế nào để làm điều đó ?Làm cách nào để xsl: apply-templates chỉ khớp các mẫu mà tôi đã xác định?
Trả lời
này đang xảy ra vì trong số các mẫu được tích hợp trong XSLT. XSLT có một vài được xây dựng trong các mẫu, mà nói:
- khi bạn áp dụng các mẫu để một phần tử, quá trình phần tử con của nó
- khi bạn áp dụng các mẫu để một nút văn bản, cung cấp cho giá trị của nó
Cùng với nhau, điều đó có nghĩa là nếu bạn áp dụng mẫu cho một phần tử nhưng không có mẫu rõ ràng cho phần tử đó, thì nội dung của nó được xử lý và cuối cùng bạn kết thúc với văn bản rằng phần tử chứa.
Đọc toàn bộ lời giải thích ở đây: http://www.dpawson.co.uk/xsl/sect2/defaultrule.html
Bạn có thể thay thế template mặc định cho nút văn bản bằng cách định nghĩa mẫu của riêng bạn và có nó không làm gì cả.
<xsl:template match="text()" />
bạn có thể thiết lập một chế độ để chỉ áp dụng mẫu của riêng bạn:
<xsl:template match="* | /" >
<xsl:apply-templates mode="myMode" />
</xsl:template>
<xsl:template match="somenode" mode="myMode">
<!-- do something here -->
</xsl:template>
Một lựa chọn khác sẽ được ghi đè được xây dựng trong các quy tắc mẫu (xem ví dụ http://unix.com.ua/orelly/xml/xmlnut/ch08_07.htm)
Đây có lẽ là vấn đề thường gặp nhất đối với người lập trình XSLT.
Hành vi được quan sát chính xác là cách xử lý tuân thủ XSLT.
Đi vào tài khoản đó:
<xsl:apply-templates/>
là viết tắt cho:
<xsl:apply-templates select="child::node()"/>
và sự tồn tại của built-in các quy tắc mẫu. Theo XSLT 1.0 Spec:.
"5,8 Built-in Rules Template
Có một built-in mẫu quy tắc để cho phép xử lý đệ quy để tiếp tục trong sự vắng mặt của một mô hình phù hợp thành công bởi một quy tắc mẫu rõ ràng Quy tắc mẫu này áp dụng cho cả nút phần tử và nút gốc.Sau đây cho thấy tương đương với built-in mẫu quy tắc:
<xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template>
Ngoài ra còn có một built-in mẫu quy định đối với từng chế độ, cho phép xử lý đệ quy để tiếp tục ở chế độ tương tự trong sự vắng mặt của một mô hình thành công khớp với quy tắc mẫu rõ ràng trong biểu định kiểu. Quy tắc mẫu này áp dụng cho cả nút phần tử và nút gốc. Phần sau đây cho thấy tương đương với quy tắc mẫu dựng sẵn cho chế độ m.
<xsl:template match="*|/" mode="m"> <xsl:apply-templates mode="m"/> </xsl:template>
Ngoài ra còn có một built-in quy tắc mẫu cho văn bản và thuộc tính nút cho phép sao chép văn bản thông qua:
<xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template>
Việc xây dựng trong mẫu quy định để được hướng dẫn chế biến và bình luận là không làm gì cả.
<xsl:template match="processing-instruction()|comment()"/>
Quy tắc mẫu được tạo sẵn cho các nút không gian tên cũng không làm gì cả. Không có mẫu nào có thể khớp với nút không gian tên; do đó, quy tắc mẫu dựng sẵn là quy tắc mẫu duy nhất được áp dụng cho các nút không gian tên.
Việc xây dựng trong quy tắc mẫu được đối xử như thể chúng được nhập khẩu ngầm trước khi stylesheet và do đó có thấp hơn nhập khẩu ưu tiên hơn tất cả các quy tắc mẫu khác. Do đó, tác giả có thể ghi đè lên một built-in mẫu quy tắc bằng cách bao gồm một mẫu quy tắc rõ ràng "
--- End của XSLT Spec quote ---
Vì vậy, nếu tác giả muốn trở thành kiểm soát hoàn toàn quá trình xử lý XSLT, chúng phải ghi đè lên tất cả các mẫu được tích hợp sẵn.
Ví dụ, nếu chúng ta không muốn sao chép các đầu ra, chúng tôi có thể khiến chúng bị bỏ qua bằng cách ghi đè -in mẫu theo cách sau:
<xsl:template match="text()" />
- 1. Làm cách nào để Regex chỉ khớp với các kết quả khớp chính xác?
- 2. Làm cách nào để xác định địa chỉ IP mà trang web của tôi đã truy cập?
- 3. Mẫu XSL có thể khớp với chế độ * ALL * không?
- 4. Làm cách nào để sử dụng Mẫu dự án Visual Studio 2010 mà tôi đã tạo
- 5. Tôi làm cách nào để truy xuất các từ mà tôi đã tweet nhiều nhất?
- 6. Làm cách nào để xác định loại kho lưu trữ SVN mà tôi có?
- 7. Làm thế nào để xác định điều khiển nào trên biểu mẫu đã tập trung?
- 8. Cách tốt nhất để xác định biểu mẫu nào đã được gửi?
- 9. Tôi làm cách nào để xác định những gì đã xảy ra với Mobile Safari?
- 10. Làm cách nào để xác thực tính năng khớp mẫu trong văn bản?
- 11. Làm cách nào để xác thực các trường biểu mẫu động trong chỉ thị góc?
- 12. Làm thế nào để xóa các dòng khớp với một mẫu nhất định trong Perl?
- 13. Làm thế nào để vẽ một ô mẫu mà không chỉ định trục x?
- 14. Làm cách nào để xác định liệu giá trị tham số PowerShell Cmdlet đã được chỉ định?
- 15. triển khai XSL-FO hàng đầu là gì? Làm cách nào để tôi quyết định trong số đó?
- 16. Cách xác định hạn chế lược đồ cho phép giá trị hoặc mẫu khớp với nhau?
- 17. Làm cách nào để xác định SelectableChannel của riêng tôi?
- 18. Làm cách nào để định dạng văn bản giữa các thẻ xsl: text?
- 19. Kiểm tra loại nút trong mẫu XSL
- 20. Tôi làm cách nào để xác định dung lượng bộ nhớ mà chương trình .NET của tôi đang sử dụng?
- 21. làm cách nào để tôi xác định tệp/thư mục đã được thêm hoặc xóa trong cam kết git?
- 22. Tôi làm cách nào để xác định lại các hàm Perl được xây dựng?
- 23. Typedef một lớp mẫu mà không cần chỉ định các tham số mẫu
- 24. Làm cách nào để tự động xác định hàm để gọi bằng ng-click trong mẫu chỉ thị AngularJS
- 25. Xác định các biến XSLT động bằng cách sử dụng xsl: select
- 26. Tôi làm cách nào để xác định biểu định kiểu mặc định cho trình duyệt?
- 27. Làm cách nào để Google xác định lập chỉ mục các trang là trang thảo luận?
- 28. Làm cách nào để tôi có thể khớp mỗi mục nhập/proc/net/tcp với mỗi ổ cắm đã mở?
- 29. Làm cách nào để cấp quyền cho ứng dụng của tôi trên các trang hoặc nhóm mà tôi đã tạo?
- 30. Làm cách nào để chỉ định tên nguyên mẫu định nghĩa bước trong Intellij Idea?
Nếu trong XSLT 2.0 và sử dụng chế độ mẫu, nó có thể hữu ích để sử dụng ' '. Nếu không, mẫu văn bản mặc định sẽ vẫn áp dụng nếu bạn ví dụ như ' '. –
Svish