Extract value of attribute node via XPath

How can I extract the value of an attribute node via XPath?

A sample XML file is:

<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>

So far I have this XPath string:

//Parent[@id='1']/Children/child[@name]  

It returns only child elements, but I would like to have the value of the name attribute.

For my sample XML file, here's what I'd like the output to be:

Child_2
Child_4
Child_1
Child_3

//Parent[@id='1']/Children/child/@name 

Your original child[@name] means an element child which has an attribute name . You want child/@name .


To get just the value (without attribute names), use string() :

string(//Parent[@id='1']/Children/child/@name)

The fn:string() fucntion will return the value of its argument as xs:string . In case its argument is an attribute, it will therefore return the attribute's value as xs:string .


You should use //Parent[@id='1']/Children/child/data(@name)

The attributes can not be serialized so you can't return them in an xml looking result. What you need to do is obtain the data from the attribute using data() function.

链接地址: http://www.djcxy.com/p/78164.html

上一篇: 使用jQuery更改图像源

下一篇: 通过XPath提取属性节点的值