Xem xét XML này:Khi cùng một phần tử XML khớp với hai mẫu XSLT thông qua các XPath khác nhau, mẫu nào thực hiện và tại sao?
<people>
<person>
<firstName>Deane</firstName>
<lastName>Barker</lastName>
</person>
</people>
gì nếu hai XSLT mẫu nào khớp một yếu tố qua XPath khác nhau? Tôi biết rằng nếu phần tử "khớp" trên hai mẫu giống hệt nhau (điều này sẽ không bao giờ xảy ra, tôi không nghĩ), mẫu cuối cùng sẽ kích hoạt.
Tuy nhiên, hãy xem xét XSL này:
<xsl:template match="person/firstName">
Template #1
</xsl:template>
<xsl:template match="firstName">
Template #2
</xsl:template>
Yếu tố "firstName" sẽ phù hợp trên một trong những mẫu này - một trong những đầu tiên như một đứa trẻ của "người" và thứ hai độc lập.
Tôi đã thử nghiệm điều này và Mẫu # 1 thực hiện, trong khi Mẫu # 2 thì không. Nguyên tắc hoạt động đằng sau điều này là gì? Tôi có thể nghĩ đến ba điều:
- đặc hiệu của XPath (cao nghi ngờ)
- Vị trí trong tập tin XSLT (còn nghi ngờ)
- Một số pre-emption của Template # 2 bởi Template # 1. Một cái gì đó xảy ra trong quá trình thực thi Mẫu số 1 cho biết Mẫu # 2 không thực thi.
Deane cũng là có liên quan: nếu hai mẫu phù hợp với các cùng một đặc trưng, đó là nghiêm chỉnh nói một lỗi, nhưng hầu hết các bộ vi xử lý không báo cáo lỗi và thay vào đó có tùy chọn cho phép áp dụng mẫu xuất hiện cuối cùng trong biểu định kiểu. – NickFitz
Vì vậy, điều này có nghĩa là một phần tử sẽ chỉ có một mẫu được thực hiện cho nó? Sự hiểu biết của tôi là bộ xử lý đi qua XML và cho mỗi phần tử hỏi, "Tôi sẽ thực thi mẫu nào?" Có đúng là nó sẽ chỉ bao giờ thực thi một mẫu đơn cho mỗi phần tử trong XML? – Deane
Chỉnh sửa: người/firstName có mức độ ưu tiên là 0,5 và firstName có mức ưu tiên là 0. Một mẫu có mức ưu tiên mặc định cao nhất (0.5) nếu và chỉ khi có một hoặc nhiều dấu gạch chéo ('/') hoặc dấu ngoặc vuông (' [','] ') –