如何通过XPath提取属性节点的值?
示例XML文件是:
<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>
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有这个XPath字符串:
//Parent[@id='1']/Children/child[@name]
Run Code Online (Sandbox Code Playgroud)
它只返回child元素,但我想拥有name属性的值.
对于我的示例XML文件,这是我想要的输出:
Child_2
Child_4
Child_1
Child_3
Run Code Online (Sandbox Code Playgroud)
lwe*_*ler 325
//Parent[@id='1']/Children/child/@name
Run Code Online (Sandbox Code Playgroud)
您的原始child[@name]意味着child具有属性的元素name.你想要的child/@name.
如上所述:
//Parent[@id='1']/Children/child/@name
Run Code Online (Sandbox Code Playgroud)
只会输出属于其谓词指定name的4个child节点的属性.然后,您需要将谓词更改为获取下一个节点的集合.Parent[@id=1][@id=2]childParent
但是,如果您Parent完全忽略该节点并使用:
//child/@name
Run Code Online (Sandbox Code Playgroud)
您可以一次选择name所有child节点的属性.
name="Child_2"
name="Child_4"
name="Child_1"
name="Child_3"
name="Child_1"
name="Child_2"
name="Child_4"
name="Child_3"
Run Code Online (Sandbox Code Playgroud)
小智 6
你应该用 //Parent[@id='1']/Children/child/data(@name)
属性无法序列化,因此您无法在xml查找结果中返回它们.您需要做的是使用data()函数从属性中获取数据.
对于所有具有命名空间的 xml,请使用 local-name()
//*[local-name()='Parent'][@id='1']/*[local-name()='Children']/*[local-name()='child']/@name
Run Code Online (Sandbox Code Playgroud)
小智 5
//Parent/Children[@ Attribute='value']/@Attribute
Run Code Online (Sandbox Code Playgroud)
在元素具有2个属性的情况下可以使用这种情况,我们可以在另一个属性的帮助下获得一个属性。
| 归档时间: |
|
| 查看次数: |
397802 次 |
| 最近记录: |