解析和处理 HTML/XML/纯文本页面 [重复]
Posted
技术标签:
【中文标题】解析和处理 HTML/XML/纯文本页面 [重复]【英文标题】:parse and process HTML/XML/plain text page [duplicate] 【发布时间】:2015-04-16 04:14:52 【问题描述】:我正在创建一个小型 php 应用程序,它可以从远程网站提取数据,它工作得很好,但我想让它现在对用户更友好。
我需要从页面中获取一些特定项目,据我所知,当您查看源代码时,该页面看起来像一个 xml 文件,但它没有样式并且显示为纯文本,所以我没有真的不知道该怎么做。
我想要的页面是这样的
<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>';
但这不起作用我真的需要最好和最简单的方法来做到这一点。
【问题讨论】:
也许SimpleXMLElement
会是从中获取数据的更好方法?
你的意思是像 $xml = simplexml_load_string($input); $callback = $xml->"name";但是我将如何获取每个通道下的所有值并保持它们相同以再次回显,因为我认为只是让它们像这样可能会将其他渠道的东西混在一起吗?
【参考方案1】:
$SimpleXMLElement = new SimpleXMLElement($str);
foreach ($SimpleXMLElement->children() as $Channel)
foreach ($Channel->children() as $Child)
echo $Child->getName() . ' = ' . (string) $Child;
这样你就可以使用SimpleXMLElement
了,很简单
【讨论】:
我需要能够逐个获取频道标签下的每个标签并回显它们或编码它们我不知道如何使用这种方法来完成,因为我不知道女巫是女巫 【参考方案2】:我会“清理”传入的数据并从中制作一个 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 ...
【讨论】:
这种方式看起来既简单又好,如果我需要编辑它,我现在就试试 这不起作用,它将 添加到新行的底部,但将第一个 标签添加到与以上是关于解析和处理 HTML/XML/纯文本页面 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
将 HTML 代码转换为纯文本,格式可用于文本文件 [重复]