Các test
quy định tại <xsl:if>
công trình như thể nó được gọi là boolean
chức năng. Chức năng này không hoạt động theo cách bạn nghĩ. Nếu đối số của nó đánh giá đến một tập hợp nút (nó sẽ là nếu bạn sử dụng một đường dẫn làm đối số của nó), nó sẽ trả về true nếu tập nút không rỗng, và sai khác. Vì vậy, hiệu quả, bạn đang thử nghiệm cho sự tồn tại của một phần tử, không phải giá trị của nó. Nếu foo
chứa false
,
<xsl:if test="/path/to/foo">
sẽ luôn luôn đánh giá đúng, vì những gì bạn đang thực sự yêu cầu trong bài kiểm tra đó là "không tố này tồn tại?" và không phải "giá trị của phần tử có đúng không?" Và yếu tố tồn tại.
Nguyên tắc rằng các giá trị boolean phải true
, false
, 1
, hoặc 0
là một phần của XML Schema (which see) và không XPath, mà không biết gì về quy tắc này. (XPath 1.0, nghĩa là XPath 2.0/XQuery 1.0 có the fn:boolean
function, thông minh, tức là nhận biết lược đồ XML, đánh giá các giá trị boolean.) Để xác định xem giá trị có đúng trong XSLT hay không, bạn phải kiểm tra rõ ràng:
<xsl:if test="/path/to/foo = 'true' or /path/to/foo = '1'">
Nguồn
2010-06-04 18:07:10
bạn có thể vui lòng đăng biểu thức XPath hiện tại của mình bằng một đoạn XML không? –
Đây không phải là một câu hỏi nào cả. Xin vui lòng, đưa ra một ví dụ cụ thể - biểu thức XPath chính xác là gì và tệp XML là gì (đơn giản nhất có thể, xin vui lòng) mà biểu thức XPath này được đánh giá? –
Thích xem một ví dụ, tôi đoán có một lỗi nhỏ trong cú pháp. –