用于处理XML的Xpath查询

时间:2013-09-19 06:26:35

标签: xml xpath

我想处理以下xml使用xpath查询

<?xml version="1.0" encoding="UTF-8"?>
<UDSObjectList>
  <UDSObject>
    <Handle>chg:400106</Handle>
    <Attributes>
      <Attribute DataType="2002">
        <AttrName>chg_ref_num</AttrName>
        <AttrValue>123</AttrValue>
      </Attribute>
      <Attribute DataType="2002">
        <AttrName>requestor.combo_name</AttrName>
        <AttrValue>ServiceDesk, Administrator </AttrValue>
      </Attribute>
      <Attribute DataType="2005">
        <AttrName>status</AttrName>
        <AttrValue>AA</AttrValue>
      </Attribute>
      <Attribute DataType="2005">
        <AttrName>priority</AttrName>
        <AttrValue>3</AttrValue>
      </Attribute>
      <Attribute DataType="2002">
        <AttrName>log_agent.combo_name</AttrName>
        <AttrValue>ServiceDesk, Administrator </AttrValue>
      </Attribute>
      <Attribute DataType="2002">
        <AttrName>assignee.combo_name</AttrName>
        <AttrValue>Smith</AttrValue>
      </Attribute>
    </Attributes>
  </UDSObject>
</UDSObjectList>

我想使用xpath查询得到AttrName ='chg_ref_num'的AttrValue,这将是确切的查询。

我正在尝试使用

"//UDSObject/Attributes/Attribute/AttrValue[AttrName=chg_ref_num]/text()" 

但没有获得AttrValue。

3 个答案:

答案 0 :(得分:0)

"/UDSObjectList/UDSObject/Attributes/Attribute/AttrName[text()="chg_ref_num"]/parent::*/AttrValue/text()" 

答案 1 :(得分:0)

您需要选择父节点以获取正确的元素。因此,使用以下xPath,您将搜索一个Attribute元素,该元素具有一个子节点,该子节点的文本节点具有搜索值。从该Attribute元素中,可以访问AttrValue节点的文本节点。

像这样:

//UDSObject/Attributes/Attribute[./AttrName/text()='chg_ref_num']/AttrValue/text()

答案 2 :(得分:0)

尝试使用following-sibling

//AttrName[.='chg_ref_num']/following-sibling::AttrValue/text()

演示 - http://www.xpathtester.com/obj/c50bed92-850e-41b9-9a01-a5ecea6ead3e