2009-07-17 26 views
11

Đây phải là một cách dễ dàng nhưng nó gây rắc rối cho tôi. Với cấu trúc này:Xpath chỉ chọn các nút trong đó các phần tử con tồn tại?

<root> 
    <a> 
    <b/> 
    </a> 
    <a/> 
</root> 

Tôi đang cố gắng xây dựng biểu thức xpath chỉ cung cấp các phần tử "a" không trống, tức là các phần tử có phần tử con. Vì vậy, tôi muốn ví dụ đầu tiên của "a" được trả về, nhưng không phải là lần thứ hai.

Cho đến nay tôi có "/ root/a/self :: *" nhưng điều đó đang trả lại cho tôi cả hai.

+2

Tôi cũng thấy rằng điều này hoạt động: /root/a [child :: *] Nhưng tôi sẽ cung cấp cho Adrian tín dụng cho một câu trả lời mà cũng hoạt động! :) –

Trả lời

12
/root/a[count(*)&gt;0] 

sẽ đưa ra bất cứ 'a' nút với bất kỳ loại nút con

+5

Cũng giống như một điểm phụ, bạn có thể sử dụng số (b) để cụ thể về các nút con bạn muốn đếm. –

6
/root/a[count(*)>0] 
+0

Tôi nghĩ Adrian là đúng về sự cần thiết phải mã hóa. –

+3

Chỉ khi bạn muốn đặt nó vào một tệp XML (ví dụ: một tập lệnh XSLT). Tuy nhiên, đó chỉ là một chi tiết lưu trữ, tôi khá chắc chắn thông số XPath sử dụng ">" :) –

3

một này hoạt động

/root/a[*] 

hoặc thậm chí

//a[*] 
+0

Hoặc nếu bạn chỉ quan tâm đến các phần tử con với tên "b": '/ root/a [b]' – Timothy

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