XPath เลือกโหนดที่มีค่าแอตทริบิวต์บางค่าเท่ากับค่าแอตทริบิวต์ของโหนดอื่น [ปิด]


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

ใครช่วยบอกวิธีการค้นหาลูกคนที่สองได้ไหม

ไม่ได้ผล ...

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

ขอขอบคุณ.


ฉันขอโทษ. สำนวนก็โอเค ฉันพบว่าฉันมีปัญหาบางอย่างในพื้นที่อื่นที่ไม่ใช่การแสดงออก


3
xpath ของคุณทำงานได้ดีสำหรับฉัน
dogbane

3
เหมือนกันสำหรับฉัน - เพิ่งทดสอบที่นี่และเลือกองค์ประกอบลูกที่สอง
Andreas Dolk

2
ถูกต้อง ... สีหน้าโอเค ฉันขอโทษ. ฉันทำผิดพลาดบางอย่างในนิพจน์ (คำนำหน้าเนมสเปซ) และเอกสารอินสแตนซ์ ขอขอบคุณ.
Jin Kwon

คำตอบ:


98

XPath นี้เฉพาะสำหรับข้อมูลโค้ดที่คุณระบุ เพื่อเลือก<child>ด้วย id เท่าที่#grandจะเขียน//child[@id='#grand']ได้

เพื่อให้ได้อายุ //child[@id='#grand']/@age

หวังว่านี่จะช่วยได้


1
ขอบคุณ Vaman มันช่วยได้ ฉันหมายถึงการอ้างอิงนิพจน์ ('/ grand / @ id') สำหรับการประเมินครั้งเดียวไม่ใช่ค่า ('# grand') ซึ่งควรได้รับการประเมินก่อน
Jin Kwon

จะเกิดอะไรขึ้นถ้า XML ของฉันมีรายการส่วนที่มีแอตทริบิวต์ชื่อแล้วจะเลือกเป็น subDataSource ได้อย่างไร ตัวอย่าง: <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

ฉันคิดว่านี่คือสิ่งที่คุณต้องการ:

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

2
ขอบคุณ MarcoS ฉันหมายถึงการอ้างอิงนิพจน์ ('/ grand / @ id') สำหรับการประเมินครั้งเดียวไม่ใช่ค่า ('# grand') ซึ่งควรได้รับการประเมินก่อน
Jin Kwon

2
@ jin-kwon: ฉันเข้าใจ ดังนั้น XPath ของคุณก็ใช้ได้
MarcoS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.