使用XPath contains()会得到太多结果

时间:2013-03-08 08:35:20

标签: xml xpath

我有一个XML文件,其中一些子树标有ID-Tags

<root>
  <A>
    <someid>5</someid>
    ...
  </A>
  <B>
    <someid>15</someid>
    ...
  </B>
</root> 

如果我尝试在XPath contains()的帮助下通过此ID找到子树,显然,遇到了像5和15这样的数字的问题:

//someid[ contains( text(), "5" ) ]

我尝试使用matches(),但不支持。

如何在没有匹配的情况下解决这个问题?

2 个答案:

答案 0 :(得分:1)

//someid[text()="5"]

我不确定您使用哪种语言,因此我将在PHP演示:

$str=<<<XML
<root>
  <A>
    <someid>5</someid>
  </A>
  <B>
    <someid>15</someid>
  </B>
</root>
XML;
$xml=simplexml_load_string($str);
foreach($xml->xpath('//someid[text()="5"]') as $node)
{
    echo $node;
}

输出5

Live demo

答案 1 :(得分:1)

如果您的ID都是数字,则可以使用

//someid[number()=5]

您也可以使用matches()和regexp

//someid[matches(text(),"^5$")]