2010-10-11 29 views
5

Một vấn đề khá đơn giản ... XML Fragment:Làm cách nào để chọn các nút KHÔNG có nút con cụ thể?

<bean id='Juicer'> 
    <property name="electric"> 
     <value>false</value> 
    </property> 
</bean> 

<bean id='Oven'> 
    <property name="electric"> 
     <value>true</value> 
    </property> 
    <property name="wattage"> 
     <value>1000</value> 
    </property> 
</bean> 

Tôi đang cố gắng để viết một truy vấn xpath rằng sẽ chọn tất cả bean s mà không có một <property name="wattage">.

Tôi không biết làm thế nào để nói "đậu không có con này" trong xpath.

Lưu ý rằng tôi không thể dựa vào thuộc tính "điện" là sai mỗi khi "công suất" bị thiếu. (Ngoài ra, ví dụ này là kinda contrived).

Cảm ơn :)

+0

@ Đây là con sói: Câu hỏi hay (+1). Xem câu trả lời của tôi cho biểu thức XPath đơn giản/ngắn nhất cho đến nay và giải thích của nó. –

Trả lời

5

Được rồi, sau một đào nhỏ tôi figured it out:

//bean[not (property[@name='wattage'])] 

đơn giản thực sự: P

+0

@ Here-Be-Wolves: Một vấn đề nhỏ: không có phần tử nào có tên là 'beans' trong XML được cung cấp của bạn ... –

+0

tất nhiên, tôi có nghĩa là" bean ". cảm ơn vì đã chỉ ra. – jrharshath

3

Hãy thử

//bean[not(property[@name='wattage'])] 
1

Trong trường hợp hiện tại nút là phần tử cha của các phần tử bean, một biểu thức XPath lựa chọn các yếu tố truy nã là:

bean[not(property/@name = 'wattage')] 

Đây có lẽ là đơn giản nhất biểu hiện như vậy (chỉ có một vị duy nhất).

biểu hiện này được dịch bằng tiếng Anh nói:

Chọn tất cả bean con của nút hiện tại mà không name thuộc tính của bất kỳ property con cái của họ là chuỗi "wattage".

0
//bean[not(@name = 'wattage')] 
+1

Tôi tin rằng truy vấn này sẽ trả về các nút như '', bởi vì tồn tại một thuộc tính ('electric') có @name không phải là' wattage'. –

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