Bagaimana saya bisa mengekstrak nilai simpul atribut melalui XPath?
Contoh file XML adalah:
<parents name='Parents'>
<Parent id='1' name='Parent_1'>
<Children name='Children'>
<child name='Child_2' id='2'>child2_Parent_1</child>
<child name='Child_4' id='4'>child4_Parent_1</child>
<child name='Child_1' id='3'>child1_Parent_1</child>
<child name='Child_3' id='1'>child3_Parent_1</child>
</Children>
</Parent>
<Parent id='2' name='Parent_2'>
<Children name='Children'>
<child name='Child_1' id='8'>child1_parent2</child>
<child name='Child_2' id='7'>child2_parent2</child>
<child name='Child_4' id='6'>child4_parent2</child>
<child name='Child_3' id='5'>child3_parent2</child>
</Children>
</Parent>
</parents>
Sejauh ini saya memiliki string XPath ini:
//Parent[@id='1']/Children/child[@name]
Hanya mengembalikan child
elemen, tapi saya ingin memiliki nilai name
atribut.
Untuk file XML sampel saya, inilah yang saya inginkan dari hasilnya:
Child_2
Child_4
Child_1
Child_3
Jawaban:
Sumber asli Anda
child[@name]
berarti elemenchild
yang memiliki atributname
. Kamu inginchild/@name
.sumber
Untuk mendapatkan nilai saja (tanpa nama atribut), gunakan
string()
:string(//Parent[@id='1']/Children/child/@name)
The fn: string () fucntion akan mengembalikan nilai dari argumen sebagai
xs:string
. Jika argumennya adalah atribut, maka itu akan mengembalikan nilai atribut sebagaixs:string
.sumber
xqilla
itu perlu meneleponxs:string
. Kenapa ya.xs
adalah awalan namespace untuk fungsi XPath. Jadi mereka tidak tercampur dengan orang lain.Kamu harus menggunakan
//Parent[@id='1']/Children/child/data(@name)
Atribut tidak dapat diserialisasi sehingga Anda tidak dapat mengembalikannya dalam hasil pencarian xml. Yang perlu Anda lakukan adalah mendapatkan data dari atribut menggunakan fungsi data ().
sumber
Seperti yang dijawab di atas:
hanya akan menampilkan
name
atribut 4child
node milik yangParent
ditentukan oleh predikatnya[@id=1]
. Anda kemudian harus mengubah predikat[@id=2]
untuk mendapatkan setchild
node untuk selanjutnyaParent
.Namun, jika Anda mengabaikan
Parent
simpul sama sekali dan menggunakan:Anda dapat memilih
name
atribut semuachild
node dalam sekali jalan.sumber
Ini adalah kasus yang dapat digunakan di mana elemen memiliki 2 atribut dan kita bisa mendapatkan satu atribut dengan bantuan yang lain.
sumber
@ryenus, Anda harus mengulang hasilnya. Ini adalah bagaimana saya melakukannya dalam vbscript;
sumber
untuk semua xml dengan namespace gunakan local-name ()
sumber