Получить значение тега из XML с помощью PHP - PullRequest
0 голосов
/ 24 января 2012

Мой XML-файл выглядит как

<entry>
    some tags 
    <title type='text'> content to be extracted </title>
    <content type='text'> content to be extracted </content>
    <link rel='alternate' type='text/html' href='https://www.youtube.com/watch?v=content to be extracted &amp;feature=youtube_gdata'/>
</entry>

, чтобы достичь этого, если я использую следующее ...

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadXML("kFeed.xml");
$entryTag = $dom->getElementsByTagName("entry")->item(0)->nodeValue;
$title = $dom->$entryTag->getElementsByTagName("title")->item(0)->nodeValue;
$descr = $dom->$entryTag->getElementsByTagName("content")->item(0)->nodeValue;

Выдает следующую ошибку, например Notice: Trying to get property of non-object для 4-й строкии Fatal error: Cannot access empty property для 5-й строки.

Может кто-нибудь предложить мне, как взломать это и как извлечь значение 'v' из ссылки href (у меня есть 4 ссылки, и я хочу это значение, которое имеет rel= 'alternate').

И, наконец, когда я напрямую даю URL (вместо kFeed.xml) для загрузки XML, он не работает, нет ошибки.

Ответы [ 4 ]

2 голосов
/ 24 января 2012

Это будет работать для вас

$str    =   "<entry>
some tags 
<title type='text'> content to be extracted </title>
<content type='text'> content to be extracted </content>
<link rel='alternate' type='text/html' href='https://www.youtube.com/watch?v=content to be extracted &amp;feature=youtube_gdata'/>
</entry>";

$xml = simplexml_load_string($str);

echo $xml->title;    //Will print title

echo "<pre>";
print_r($xml->link->attributes());   //Will print attributes also
1 голос
/ 24 января 2012

loadxml($xml) ожидает, что $ xml будет представлять собой сами данные xml, а не указатель на (файл) источник.
Используйте взамен DOMDocument :: load ($ filename) .

И $dom->$entryTag->... тоже не сработает. Возможно, вас заинтересует DOMXPath или SimpleXML .

0 голосов
/ 24 января 2012
<code>$xml = simplexml_load_file('xx.xml');

$title = (string)$xml->title;
$content = (string)$xml->content;
$linkHref = (string)$xml->link['href'];

$url = parse_url($linkHref);
parse_str($url['query'], $params);

echo '<pre>'; print_r($params['v']); echo '
';
0 голосов
/ 24 января 2012

Должны ли вы на самом деле обращаться к элементу как к массиву, а не как к объекту?

$descr = $dom->$entryTag->getElementsByTagName("content")->item[0]->nodeValue;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...