XPath chọn một nút có một số giá trị thuộc tính bằng với một số giá trị thuộc tính của nút khác [đã đóng]


87
<grand id="grand">
  <parent>
    <child age="18" id="#not-grand"/>
    <child age="20" id="#grand"/> <!-- This is what I want to locate -->
  </parent>
</grand>

Ai có thể cho tôi biết làm thế nào để diễn đạt để xác định vị trí đứa trẻ thứ hai?

Điều này không hoạt động ...

"/grand/parent/child[@id=concat('#',/grand/@id)]/@age"

Cảm ơn bạn.


Tôi xin lỗi. Biểu thức là OK. Tôi thấy tôi gặp một số vấn đề trong lĩnh vực khác không phải chính biểu hiện.


3
Xpath của bạn hoạt động tốt cho tôi.
dogbane

3
Đối với tôi cũng vậy - chỉ cần kiểm tra nó ở đây và nó chọn phần tử con thứ hai.
Andreas Dolk

2
Đúng ... Biểu thức là OK. Tôi xin lỗi. Tôi đã mắc một số lỗi trong biểu thức (tiền tố không gian tên) và tài liệu phiên bản. Cảm ơn bạn.
Jin Kwon

Câu trả lời:


95

XPath này dành riêng cho đoạn mã bạn đã cung cấp. Để chọn <child>với id như #grandbạn có thể viết //child[@id='#grand'].

Để có được tuổi //child[@id='#grand']/@age

Hi vọng điêu nay co ich


1
Cảm ơn Vaman. Nó đã giúp đỡ. Ý tôi là đề cập đến biểu thức ('/ grand / @ id') để đánh giá một lần chứ không phải giá trị ('# grand') sẽ được đánh giá đầu tiên.
Jin Kwon

điều gì sẽ xảy ra nếu XML của tôi có danh sách phần với thuộc tính name thì làm thế nào để chọn là subDataSource? Ví dụ: <section name="valuation"> <capital-value> some data </capital-value> <location> some data </location> </section> <section name="subject-property"> <address>72 Gordon Avenue</address> <postcode>HA7 3QS</postcode> <bedrooms>2</bedrooms> </section>
Sanjay Sahani

30

Tôi nghĩ đây là những gì bạn muốn:

/grand/parent/child[@id="#grand"]

2
Cảm ơn MarcoS. Ý tôi là đề cập đến biểu thức ('/ grand / @ id') để đánh giá một lần chứ không phải giá trị ('# grand') sẽ được đánh giá đầu tiên.
Jin Kwon

2
@ jin-kwon: Tôi hiểu rồi. Vì vậy, bạn XPath vẫn ổn.
MarcoS
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.