Php 对这个xPath有点帮助吗?

Php 对这个xPath有点帮助吗?,php,dom,xpath,Php,Dom,Xpath,我从RSS上得到一些信息 <?php $dom = new DOMDocument; libxml_use_internal_errors(TRUE); $dom->load('http://www.myrss.com'); libxml_clear_errors(); $xPath = new DOMXPath($dom); $links = $xPath->query('xxxxx'); foreach($links as $link) { printf("%s

我从RSS上得到一些信息

<?php
$dom = new DOMDocument;
libxml_use_internal_errors(TRUE);
$dom->load('http://www.myrss.com');
libxml_clear_errors();

$xPath = new DOMXPath($dom);
$links = $xPath->query('xxxxx');
foreach($links as $link) {
    printf("%s \n", $link->nodeValue);
}
?>
内容文本

<span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"> CONTENT TEXT IS HERE </span>
内容文本在这里

我应该使用什么xPath来获取这些数据?谢谢

您的代码格式不正确,因此其他人很难使用它


但是,这里的交互式工具:(XPath Builder)在构造XPath查询时非常有用。

内容似乎是经过编码/转义的,因此不能使用XPath进行查询,因为它不是HTML/XML


您应该提取内容,将其转换为HTML/XML,然后分别将其加载到DOM文档中。然后您可以使用Xpath查询它。

如果它是它的外观,并且内容是HTML编码的,那么您不能一步完成它。您必须检索每个描述文本并解析到它自己的DOM中(除非您想求助于正则表达式,我强烈反对)

当你有疑问的时候,你可以先通过
DOMDocument
具有
loadHTML()
,这是一种非常有弹性的方法,但不能保证它可以加载任何HTML

//注意,这是未经测试的。不过,它应该会给你一个想法。
$dom=新的DOMDocument;
libxml\u使用\u内部错误(TRUE);
$dom->load($dom)http://www.myrss.com');
libxml_clear_errors();
$xPath=newdomxpath($dom);
$items=$xPath->query('/rss/channel/item');
foreach($items作为$item){
$descr=$xPath->query('./description',$item);
//最多应该有一个,但每个都很优雅
//处理没有
foreach($d描述为$d){
$temp_dom=new DOMDocument();
$temp_dom->loadHTML($d->nodeValue);//错误处理/Tidy here!
$temp_xpath=new DOMXPath($temp_dom);
$img=$temp_xpath->query('//img');
$txt=$temp_xpath->query('//span[@class=“Apple style span”]');
//现在使用$img和$txt执行一些操作
}
}

嘿,谢谢,我想这段代码对我会有很大帮助!我现在正在测试它,但我还没有设法让它显示一些东西。我是否应该替换$items=$xPath->query('/channel/item');有什么吗?@jbquirier:好吧,这取决于你的RSS是什么样子的,
/channel/item
只是一个猜测。也许您还必须首先向注册一个默认名称空间。顺便说一句:一旦你得到它的工作,你可以建议编辑我的答案。我一看到就批准。好吧!我会尽快和你联系的。rss链接就在这里case@JBCurious:看起来没有涉及任何名称空间,XPath
/rss/channel/item
应该为您获取所需内容。我会修正我的答案。另外,请注意UTF-8问题,我不完全确定PHP处理希腊字母的能力。我得到了以下信息:可捕获致命错误:类DOMNodeList的对象无法转换为字符串……请注意,您没有要选择的元素,只有一个大文本节点。Atom可以正确处理嵌入式XML词汇表。
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"> CONTENT TEXT IS HERE </span>
// beware, this is untested. it should give you an idea, though.

$dom = new DOMDocument;
libxml_use_internal_errors(TRUE);

$dom->load('http://www.myrss.com');
libxml_clear_errors();

$xPath = new DOMXPath($dom);
$items = $xPath->query('/rss/channel/item');

foreach($items as $item) {
    $descr = $xPath->query('./description', $item);
    // there should be at most one, but foreach gracefully
    // handles the case where there is no <description>
    foreach ($descr as $d) {
        $temp_dom = new DOMDocument();
        $temp_dom->loadHTML( $d->nodeValue );   // error handling/Tidy here!

        $temp_xpath = new DOMXPath($temp_dom);

        $img = $temp_xpath->query('//img');
        $txt = $temp_xpath->query('//span[@class="Apple-style-span"]');

        // now do something with $img and $txt
    }

}