【问题标题】:Get tag value from XML using PHP使用 PHP 从 XML 中获取标签值
【发布时间】:2012-02-17 16:12:55
【问题描述】:

我的 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;

它会抛出以下错误,例如第 4 行的 Notice: Trying to get property of non-object 和第 5 行的 Fatal error: Cannot access empty property

有人可以建议我如何破解它以及如何从链接的 href 中提取 'v' 值(我有 4 个链接,我想要那个具有 rel='alternate' 的值)。

最后,当我直接给出一个 URL(而不是 kFeed.xml)来加载 XML 时,它不起作用,没有错误。

【问题讨论】:

  • 您已经问过这个问题,甚至接受了答案。 stackoverflow.com/questions/8968223/…
  • @dfsq 我无法访问 xml 节点值。提取v值是的,我已经问过bt这是完全不同的情况,我想要基于链接的rel值的v值......每个rel都有不同的v值
  • 我在该线程中的回答是完整的解决方案:stackoverflow.com/a/8968413/949476。只需将a[contains(@href, "v=") 更改为link[contains(@href, "v=")
  • 谢谢,但你能帮我提取标题和内容描述吗

标签: php xml youtube


【解决方案1】:

这对你有用

$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

【讨论】:

  • 我希望它从一个我无法加载的 url 加载
  • 即使执行您的建议,它也会抛出相同的错误(有问题)
  • @pbvamsi 那么你必须使用 simplexml_load_file 而不是 simplexml_load_string
  • 谢谢,但它仍然抛出与问题中所述相同的错误
  • @pbvamsi 我认为您的 xml 文件可能不包含任何数据。我已经在我的机器上成功运行了上面的字符串,因为我使用的是 php 5。检查你的 php 版本
【解决方案2】:

loadxml($xml) 期望 $xml 是 xml 数据本身,而不是指向(文件)源的指针。
请改用DOMDocument::load($filename)

$dom-&gt;$entryTag-&gt;... 也不起作用。您可能对DOMXPathSimpleXML 感兴趣。

【讨论】:

    【解决方案3】:

    您实际上应该以数组而不是对象的形式访问项目吗?

    $descr = $dom->$entryTag->getElementsByTagName("content")->item[0]->nodeValue;
    

    【讨论】:

    • 我想获得这些标题和描述值,在后期我会将它们推送到我生成的 xml 中的项目数组中。总之,是的项目是一个数组(我把这个标题和描述作为子节点)
    【解决方案4】:
    $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 '</pre>';
    

    【讨论】:

    • 这很有用 bt无法提取内容,它Notice: Undefined index: v
    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    相关资源
    最近更新 更多