我有一个像这样的XML文件:
<rss version="2.0">
<channel>
-<title>Match Probabilities</title>
-<link>abc[dot]com</link>
-<description>abc.com RSS feed - match results and soccer predictions.</description>
-<item>
-<title>Manchester City v Watford</title>
-<link>abc[dot]com/h2h/manchester-city-watford/</link>
-<pubDate>05/18/2019</pubDate>
-<description><a href="abc[dot]com/h2h/manchester-city-watford/" target="_blank">Manchester City v Watford</a><br/><br/><table border="1" width="100%"><tr><td width="40%"><strong>Result prediction</strong></td> <td>Manchester City to win</td></tr><tr><td><strong>Over/Under prediction</strong></td><td>over 2.5 goals</td></tr><tr><td><strong>HT / FT prediction</strong></td><td>draw / Manchester City to win</td></tr><tr><td><strong>Goal Difference prediction</strong></td><td>2 goals</td></tr><tr><td><strong>Total Goals prediction</strong></td><td>6 goals</td></tr><tr><td><strong>Team to Score prediction</strong></td><td>both teams</td></tr><tr><td><strong>Team to Win without Conceding a Goal prediction</strong></td><td>none</td></tr><tr><td><strong>Anytime Goalscorer prediction</strong></td><td>S. Agüero(Manchester City)<br/>Gabriel Jesus(Manchester City)<br/>P. Foden(Manchester City)<br/></td></tr></table><br/>
</description>
</item>
</channel>
</rss>
我已经尝试过此代码,并且确实成功输出了字符串。
$xml = simplexml_load_file(file.xml);
foreach($xml->channel->item as $item){
$html .= $item->description;
$html .= "<hr />";
}
echo $html;
但是,我的期望是我只想只在table
属性中获取description
。
我也尝试过$html .= $item->description->table->Attribute('<tr>';
//第7行,但是失败了。错误消息如下所示:
Fatal error: Call to undefined method SimpleXMLElement::Attribute() in /home/content/12/1232354/html/views/file.html on line 7.
您的帮助将不胜感激。谢谢
答案 0 :(得分:0)
$xml = simplexml_load_file("file.xml");
foreach($xml->channel->item as $item){
echo '<pre>'; print_r($item->description->table);
//You cannot get the table data as string. You have to process them so echo $html don't show anything
$html .= $item->description->table;
$html .= "<hr />";
}
echo $html;
希望这可以帮助您找到表值。您必须使用->表示法遍历值,因为始终会使用对象表示法来找到它。
答案 1 :(得分:0)
如果您需要表的完整XML而不仅仅是字符串值,则需要将行更改为...
$html .= $item->description->table->asXML();
因此,这需要使用<table>
元素中的<description>
元素,并使用asXML()
重新创建源文档的原始XML。
所以您的代码应该是...
$xml = simplexml_load_file(file.xml);
foreach($xml->channel->item as $item){
$html .= $item->description->table->asXML();
$html .= "<hr />";
}
echo $html;
编辑:
描述可能已经编码了HTML实体,在浏览器中查看时看起来不错,但是源实际上具有所有>
类型代码。如果是这种情况,那么您可以提取描述,然后对其进行解码,然后再次将其加载到新文档中(您需要添加一个虚拟根节点,因为它实际上是一个文档片段)...
$xml = simplexml_load_file("file.xml");
$html = '';
foreach($xml->channel->item as $item){
$desc = html_entity_decode((string)$item->description);
$descXML = simplexml_load_string('<desc>'.$desc.'</desc>');
$html .= $descXML->table->asXML();
$html .= "<hr />";
}
echo $html;
答案 2 :(得分:0)
要解析XML,您可以使用DOMDocument,并获取作为“描述”元素后代的所有“表格”元素,请使用xpath //description//table
,并在获取了表格元素之后,您可以使用textContent
属性获取其文本内容,如下所示:
$domd=@DOMDocument::loadHTML($xml);
$xp=new DOMXPath($domd);
foreach($xp->query("//description//table") as $table){
var_dump($table->textContent);
}