2012-10-22 50 views
6

Với XPath, tôi biết rằng bạn có thể sử dụng toán tử kết hợp theo cách sau:Trong XPath có thể sử dụng toán tử OR với tên nút không?

//*[@id="Catalog"]/thead | //*[@id="Catalog"]/tbody 

này có vẻ là một chút vụng về với tôi mặc dù. Có cách nào để làm một cái gì đó tương tự như một trong những thay vào đó?

//*[@id="Catalog"]/(thead|tbody) 
//*[@id="Catalog"]/(thead or tbody) 
//*[@id="Catalog"]/*[nodename="thead" or nodename="tbody"] 

Điều đó có vẻ rất nhiều dễ đọc hơn và trực quan để tôi ...

Trả lời

5

Trong khi các biểu hiện:

//*[@id="Catalog"]/*[name()="thead" or name()="tbody"] 

là đúng

Biểu thức này là hiệu quả hơn:

//*[@id="Catalog"]/*[self::thead or self::tbody] 

Có nhưng là một cách thứ ba để kiểm tra xem tên của một yếu tố là một trong một chuỗi quy định của chuỗi:

//*[@id="Catalog"]/*[contains(''|thead|tbody|',concat('|',name(),'|'))] 

Sử dụng kỹ thuật mới nhất này có thể đặc biệt thiết thực trong trường hợp mumber tên có thể là rất dài (chiều dài không giới hạn và chưa biết). Chuỗi tên có thể phân tách bằng ống có thể được truyền qua như một tham số bên ngoài cho phép biến đổi, làm tăng đáng kể tính tổng quát, khả năng sử dụng lại và "DRY" -ness.

0

Có bạn có thể sử dụng:

//*[@id="Catalog"]/[nodename='thead' or nodename='tbody'] 

EDIT:

Chỉ cần đọc lại bài gốc của bạn và nhận ra những gì bạn đang hỏi. Cú pháp trên sẽ không chính xác cho tình huống này. Bạn không chắc chắn làm thế nào để có được tên của nút để sử dụng nhưng nodename không phải là đúng ...

+0

Bạn quên dấu sao trước '['. (Tôi sẽ chỉ chỉnh sửa bài đăng, nhưng StackOverflow không cho phép tôi thực hiện chỉnh sửa dài hơn 6 ký tự.) – Ajedi32

+0

Ngoài ra, bạn có biết điều này được ghi lại ở đâu không? =) – Ajedi32

+0

Xin lỗi, vâng, đó là lỗi đánh máy. Bạn sẽ cần một ngôi sao (hoặc tên phần tử khác) ở đó. –

4

Bạn đang tìm kiếm name() chức năng:

//*[@id="Catalog"]/*[name()="thead" or name()="tbody"] 
2

Lưu ý rằng với XPath 2.0 nỗ lực của bạn //*[@id="Catalog"]/(thead|tbody) là đúng . Cách tiếp cận đó không hoạt động với XPath 1.0.

Các vấn đề liên quan