使用php + xpath获取节点值作为文本

时间:2010-03-04 22:55:08

标签: php xpath

如何在PHP中使用xpath获取Xml节点的字符串值? 我RTM但是有更复杂的情况,使用foreach我只想要我的节点文本。 XML:

<ValCurs Date="00.00.0000" name="Official exchange rate">
<Valute ID="47">
  <NumCode>978</NumCode>
  <CharCode>EUR</CharCode>
  <Nominal>1</Nominal>
  <Name>Euro</Name>
  <Value>17.4619</Value>
</Valute>
</ValCurs>

我的所作所为:

$xmlToday = simplexml_load_file($urlToday);
$EurToday = $xmlToday->xpath("/ValCurs/Valute[@ID='47']/Value");

$EurToday = array(1) { [0]=>  object(SimpleXMLElement)#3 (1)
                         { [0]=>  string(7) "17.4619" } }

我只需要价值。作为浮动值。

2 个答案:

答案 0 :(得分:3)

SimpleXMLElement::xpath返回与XPath查询匹配的元素数组。

这意味着如果你只有一个元素,你仍然需要使用一个数组,并提取它的第一个元素:

var_dump($EurToday[0]);


但是这会得到一个SimpleXMLElement对象:

object(SimpleXMLElement)[2]
  string '17.4619' (length=7)


要获取它包含的浮点值,您必须将其转换为浮点数 - 例如,使用floatval

var_dump(floatval($EurToday[0]));


哪能得到你想要的东西:

float 17.4619


作为旁注:您应检查xpath方法是否未返回false (如果出现错误)或空数组(如果没有匹配)查询),然后尝试使用其返回值。

答案 1 :(得分:2)

XPath Examples, w3schools.com

参见章节:选择所有价格

/bookstore/book/price/text()

text()似乎得到了你想要的东西。 PHP中的等价似乎是savexml()因此:

$EurToday = (float) $xmlToday->xpath("/ValCurs/Valute[@ID='47']/Value/savexml()");