我正在创建一个小型的php应用程序,它可以从远程网站获取数据,但是我希望它能够让用户更友好。
我需要从页面中获取一些特定的项目,据我所知,该页面看起来像一个xml文件,你看看它的代码,但它没有样式,并显示为纯文本所以我不# 39;我真的不知道该怎么做。
我想要的页面看起来像这样
<channel>
<name>data</name>
<id>data</id>
<img>data</img>
<auther>data</auther>
<mp3>data</mp3>
<bio>data</bio>
</channel>
<channel>
<name>data</name>
<id>data</id>
<img>data</img>
<auther>data</auther>
<mp3>data</mp3>
<bio>data</bio>
</channel>
<channel>
<name>data</name>
<id>data</id>
<img>data</img>
<auther>data</auther>
<mp3>data</mp3>
<bio>data</bio>
</channel>
<channel>
<name>data</name>
<id>data</id>
<img>data</img>
<auther>data</auther>
<mp3>data</mp3>
<bio>data</bio>
</channel>
我需要从频道标记下的每个标记中获取所有数据并保持相同的顺序,以同样的方式将其回显到我自己的页面上。
我怎么能这样做?我尝试使用带有以下模式的正则表达式
$pattern = '<channel>
<name>(.*)</name>
<id>(.*)</id>
<img>(.*)</img>
<auther>(.*)</auther>
<mp3>(.*)</mp3>
<bio>(.*)</bio>
</channel>';
但这不起作用我真的需要最好和最简单的方法来做到这一点。
答案 0 :(得分:0)
$SimpleXMLElement = new SimpleXMLElement($str);
foreach ($SimpleXMLElement->children() as $Channel) {
foreach ($Channel->children() as $Child) {
echo $Child->getName() . ' = ' . (string) $Child;
}
}
通过这种方式,您可以使用SimpleXMLElement
,非常简单
答案 1 :(得分:0)
我会&#34;消毒&#34;传入的数据并从中生成一个xml文档。这可以通过简单地将其包装到周围标签中来完成。 (我将其命名为channels
)。有了这个,您可以使用DOM
解析数据:
// Sanitize input data. Make an xml out of it
$xml = '<channels>';
$xml .= file_get_contents($url);
$xml .= '</channels>';
// Create a document
$doc = new DOMDocument();
$doc->loadXML($xml);
// Iterate through channel elements
foreach($doc->getElementsByTagName('channel') as $channel) {
echo $channel->getElementsByTagName('name')->item(0)->nodeValue . PHP_EOL;
echo $channel->getElementsByTagName('id')->item(0)->nodeValue . PHP_EOL;
// And so on ...
}