Tôi đang cố gắng viết một Tuyên bố Xpath (1.0) có thể đọc thông tin từ nút 'tìm kiếm' và thực hiện tìm kiếm bằng cách sử dụng nó.Làm cách nào tôi có thể sử dụng hàm Xpath 'contains()' để trả về không có gì nếu tham số tìm kiếm của nó trống hoặc thiếu/sai?
Tôi đã thực hiện một số tiến bộ tốt đẹp, nhưng tình cờ gặp một vấn đề nếu một thuộc tính (được sử dụng cho một giá trị trong tìm kiếm) trống hoặc không tồn tại, nó không thành công.
Mã Edited để đơn giản hóa Ví dụ:
Vì vậy, đây là XML mẫu của tôi:
<xml>
<files>
<file name="foo" description="" rating="4"/>
<file name="food" description="" rating="4"/>
<file name="foobar" description="" rating="3"/>
<file name="bar" description="" rating="3"/>
<file name="barter" description="" rating="3"/>
<file name="barterer" description="" rating="2"/>
</files>
<searches>
<search id="1">
<exclude>
<file term="foo"/>
</exclude>
</search>
</searches>
</xml>
Và XPATH làm việc:
//files/file[
not(contains(@name, //search[@id='1']/exclude/file/@term))
]
Nó hoạt động như mong đợi ...
Tuy nhiên, nếu thuộc tính mong đợi tôi s thiếu hoặc trống nó sẽ không hoạt động. Tôi nghĩ bởi vì: chứa (@attrib, "") phù hợp với mọi thứ vì lý do nào đó, do đó, không phải() sẽ luôn khớp với không có gì nếu thuộc tính là "" hoặc không có.
Ví dụ, nếu tôi thay đổi đoạn loại trừ của XML này nó không thành công:
<exclude>
<file term=""/>
</exclude>
với điều này quá:
<exclude></exclude>
Có cách nào để kiểm tra cho một giá trị rỗng và không thực hiện lựa chọn? hoặc có lẽ là một cách tốt hơn để cấu trúc Logic. Bare in mind Tôi không thể sử dụng Conditionals hoặc các chức năng khác trong Xpath2.0.
thể bạn, xin vui lòng, chỉnh sửa câu hỏi và mô tả các quy tắc cho việc tìm kiếm một trận đấu tìm kiếm - đây không được cung cấp và biểu thức XPath dài là khá khó hiểu - Tôi nghi ngờ rằng một biểu thức ngắn hơn có thể được sử dụng. Ví dụ: 'cond1 và cond2 hoặc cond1 hoặc cond2' có thể được thay thế bằng biểu thức ngắn hơn, tương đương' cond1 hoặc cond2'. –
Xin lỗi về điều đó. Tôi đã cập nhật các ví dụ về Mã để rõ ràng hơn cho vấn đề của tôi. – Futile32
@ Futile32, có thể XPath của bạn nhận được các nút có tên = "" và bởi vì bạn không có nút nào, bạn không nhận được bất kỳ thẻ nào. –