PHP SimpleXML с xpath - PullRequest
       8

PHP SimpleXML с xpath

0 голосов
/ 15 декабря 2009

У меня есть небольшой XML-файл:

<wddxPacket version='1.0'>
  <header/>
  <data>
    <struct type='coldfusion.runtime.ArgumentCollection'>
      <var name='HEADLINE'>
        <string>Richard Barret's Articles on Leadership and High Performance Organisations</string>
      </var>
    </struct>
  </data>
</wddxPacket>

Я пытаюсь использовать PHP SimpleXML и xpath для извлечения значения между строковым элементом в элементе имени var HEADLINE. Этот код работает:

// Location of the XML file on the file system
$file = 'http://10.10.200.37/skins/importscript/41802.xml';
$xml = simplexml_load_file($file);

// CREATE THE ARRAYS FOR EACH XML ELEMENT NEEDED

$title = $xml->xpath('//var[@name="HEADLINE"]');

echo "<p>";
print_r($title);
echo "</p>";

Проблема в том, что он возвращает не только значение, но и всю информацию массива. Как в:

Array ( 
  [0] => SimpleXMLElement Object ( 
    [@attributes] => Array ( 
      [name] => HEADLINE 
    ) 
    [string] => Richard Barret's Articles on Leadership and High Performance Organisations
  )
)

Как мне заставить его возвращать только значение и ничего больше?

Если я заменю print_r на echo $title;, я получу слово Array на странице вместо значения. Если я попытаюсь echo $title[0];, я вообще ничего не получу.

Я пробовал так много вещей, что больше ни о чем не могу думать! Что я делаю неправильно? Кто-нибудь может указать мне правильное направление? Спасибо!

Ответы [ 3 ]

11 голосов
/ 15 декабря 2009

Извините, пожалуйста, игнорируйте это! Сразу после публикации вопроса я понял, что делаю не так!

Для всех, кто был таким же медленным, как я сегодня, здесь была проблема ...

$title = $xml->xpath('//var[@name="HEADLINE"]');

Должно быть:

$title = $xml->xpath('//var[@name="HEADLINE"]/string');

Теперь все работает как надо.

3 голосов
/ 15 декабря 2009

Вас интересует nodeValue.

Пример:

$xpath->evaluate("some_tag_name", $some_dom_element)->item(0)->nodeValue;

или используйте селектор string:

$title = $xml->xpath('//var[@name="HEADLINE"]/string');
0 голосов
/ 29 декабря 2009

Как правило, я всегда добавляю тип 'string' при получении значений из SimpleXML

$title = (string) $xml->xpath('//var[@name="HEADLINE"]/string');

Не уверен, что это хорошая практика ..

...