получить значение узла в виде текста с помощью php + xpath - PullRequest
1 голос
/ 05 марта 2010

Как я могу просто получить строковое значение узла Xml, используя xpath в PHP? Я 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 ]

3 голосов
/ 05 марта 2010

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 (в случае ошибки) , либо пустой массив (если ничего не соответствовало запросу) , прежде чем пытаться работать с возвращаемым значением.

2 голосов
/ 06 марта 2010

Примеры XPath, w3schools.com

См. Раздел: Выбрать все цены

/bookstore/book/price/text()

text (), кажется, получает то, что вы ищете. Эквивалент в PHP выглядит как savexml () Следовательно:

$EurToday = (float) $xmlToday->xpath("/ValCurs/Valute[@ID='47']/Value/savexml()");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...