【问题标题】:XPath Select node where exists child with given attribute valueXPath 选择存在具有给定属性值的子节点的节点
【发布时间】:2013-04-26 06:32:04
【问题描述】:

我正在尝试创建 az xpath,我想在其中获取一个节点,其中存在一个具有属性的子节点。我的问题是这个结构的唯一区别是子属性。这是一个例子来告诉你我的意思:

<Values>
    <record name="svc_sig">
        <record name="sig_in">
            <array name="rec_fields">
                <record>
                    <value name=field_name">UniqueName1</value>
                </record>
                <record>
                    <value name=field_name">UniqueName2</value>
                </record>
                <record>
                    <value name=field_name">UniqueName3</value>
                </record>
                <record>
                    <value name=field_name">UniqueName4</value>
                </record>
            </array>
        </record>
    </record>
<Values>

例如,给定 UniqueName3 我想获取包含它的记录。 到目前为止,我尝试了以下方法:

/Values/record[@name='svc_sig']/record[@name='sig_in']/array[@name]/record/value[@name='field_name']

但是,我得到了所有具有属性 field_name 的值节点。

【问题讨论】:

  • 如果你想得到一个有'UniqueName3'字符串的'record',你应该使用XPATH,比如record[value/text()='UniqueName3']
  • 谢谢,这正是我想要的!

标签: xml xpath


【解决方案1】:

你可以试试这个:

//value[text()="UniqueName3"]/..

这将选择 record 元素,它是 value 元素的父元素,其中包含 UniqueName3 作为其文本值。

这是一个证明:http://www.xpathtester.com/obj/1afeedf1-46bd-4adb-841e-da6e6945b6d4(按测试按钮)。

【讨论】:

  • 我相信你也可以做到.=text()=的简写
  • 如果你想测试一个节点而不是 text() 怎么办?
猜你喜欢
  • 1970-01-01
  • 2011-01-30
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多