2016-11-18 2 views
-2

Я пытаюсь проанализировать XML-файл на PHP с помощью функции simplexml_load_file. Все в порядке, кроме моего XML-файла есть тег <TIME>, который является функцией PHP.XML-тэг - это функция PHP

поэтому следующий код не может получить значение тега:

$xml = simplexml_load_file('some_xml_file.xml'); 
$value = $xml->SOME_TAG->TIME; 

Как я могу получить это значение?

+2

Вы могли бы попытаться уточнить, какие ошибки вы получите? потому что, насколько я знаю, PHP не будет * пытаться выполнить функцию time() в этом случае, поскольку в нем нет круглых скобок (необходимых для вызова функции).также, после '->', PHP ищет член объекта, * не * общую функцию. –

ответ

0

Из PHP инструкции:

Доступ к элементам в пределах документа XML, которые содержат символы, не допускаемые при именовании РНР (например, дефис) может быть достигнуто путем инкапсуляции имя элемента в фигурные скобки и апостроф.

Пример # 3 Получение

<?php 
include 'example.php'; 

$xml = new SimpleXMLElement($xmlstr); 

echo $xml->movie->{'great-lines'}->line; // "PHP solves all my web problems" 
?> 

И если вам нужно получить атрибут вы можете сделать это:

До сих пор мы только покрыли работу чтения имен элементов и их значения. SimpleXML также может обращаться к атрибутам элемента. Доступ атрибутов элемента так же, как и элементы массива.

foreach ($xml->movie[0]->rating as $rating) { 
    switch((string) $rating['type']) 
0

Это работает для меня

<?php 

$xmlString = "<top><middle><TIME>1:27</TIME></middle></top>"; 
$xml = simplexml_load_string($xmlString); 
echo $xml->middle->TIME; 


php /tmp/xml.php 
1:27 
0

Проверьте содержимое файла XML. Для вашего PHP кода, чтобы работать, он должен содержать по крайней мере следующее:

<XML> 
<SOME_TAG> 
    <TIME>1:27</TIME> 
</SOME_TAG> 
</XML> 

Когда я использую этот XML-файл в сочетании с кодом, он работает, как ожидалось.

0

Спасибо всем, мне удается получить ценность, но все еще что-то странное. Пример XML:

<INGREDIENTS> 
    <INGREDIENT> 
     <NAME>Potatoes</NAME> 
     <AMOUNT>10 kg</AMOUNT> 
     <TME>20 min</TIME> 
    </INGREDIENT> 
</INGREDIENTS> 

PHP код, чтобы получить NAME, количество и значения времени:

$ing = $xml->INGREDIENTS->INGREDIENT; 
$name = $ing->NAME; 
$amount= $ing->AMOUNT; 
$time= $ing->TIME; 
echo $name."/".$amount."/".$time; 

Результат:

Potatoes/10 kg/

Однако, если я использую весь путь к часовому тега :

$ing = $xml->INGREDIENTS->INGREDIENT; 
$name = $ing->NAME; 
$amount= $ing->AMOUNT; 
$time= $xml->INGREDIENTS->INGREDIENT->TIME; 
echo $name."/".$amount."/".$time; 

Результат:

Potatoes/10 kg/20 min 

Может кто-нибудь объяснить, почему он работает именно так?

+0

Im на более раннем PHP 5.4.25, учитывая ваш пример XML-файла, это работает для меня: '$ xml = simplexml_load_file ('some_xml_file.xml'); $ ing = $ xml-> ИНГРЕДИЕНТ; $ name = $ ing-> NAME; $ amount = $ ing-> AMOUNT; $ time = $ ing-> TIME; 'Таким образом, ответ будет следующим: вам нужно использовать правильный способ доступа к свойствам SimpleXMLObjects ... – Werner