Tôi có thể làm một biểu thức XPath trong stylesheet của tôi là chọn lựa duy nhất động vật với chuỗi '_monkey' trong tên của họ?
ví dụ: khớp với ký tự đại diện '* _monkey'?
wildcard Điều này có nghĩa một chuỗi kết thúc với "_monkey", không một chuỗi chứa "_monkey".
Sử dụng:
//animal[ends-with(@name, '_monkey')]
Trên đây sử dụng các tiêu chuẩn XPath 2.0 chức năng ends-with()
và vì thế chỉ có trong XSLT 2.0.
Trong XSLT 1.0 sử dụng XPath 1.0 biểu thức sau đây:
//animal[substring(@name, string-length(@name) -6)='_monkey']
Nó không được khuyến khích sử dụng các //
viết tắt như thế này có thể dẫn đến việc đánh giá hiệu quả. Sử dụng chuỗi kiểm tra vị trí cụ thể hơn bất cứ khi nào cấu trúc của tài liệu XML được biết đến. Ví dụ, nếu animal
yếu tố này là tất cả trẻ em trong những yếu tố trên cùng của tài liệu XML, sau đó XPath sau (2.0 hoặc 1.0, tương ứng) biểu thức có thể hiệu quả hơn:
/*/animal[ends-with(@name, '_monkey')]
và
/*/animal[substring(@name, string-length(@name) -6)='_monkey']
Tùy thuộc vào nhu cầu cụ thể của một người (ví dụ như bạn thực sự có nghĩa là "chứa" chứ không phải "kết thúc với"), các chức năng contains()
, starts-with()
và substring()
cũng có thể hữu ích:
contains(someString, someTargetString)
starts-with(someString, someTargetString)
substring(someString, start-index, length) = someTargetString
Cuối cùng, thuộc tính match
của <xsl:templates>
không cần chứa biểu thức XPath tuyệt đối - chỉ biểu thức XPath tương đối xác định đủ ngữ cảnh được khuyến nghị sử dụng.
Như vậy, sử dụng ở trên là biểu thức phù hợp sẽ là một cái gì đó như:
<xsl:template match="animal[ends-with(@name, '_monkey')]">
và
<xsl:template match=
"animal[substring(@name, string-length(@name) -6)='_monkey']">
Phiên bản nào của XSLT để bạn sử dụng? –
Câu hỏi hay, +1. Xem câu trả lời của tôi cho các giải pháp XSLT 1.0 và XSLT 2.0.:) –
@iYasha Tôi hiện đang sử dụng 1.0, nhưng quan tâm đến việc tìm hiểu sự khác biệt giữa hai. –