【问题标题】:PHP Parsing xml output into arrayPHP将xml输出解析为数组
【发布时间】:2013-11-18 16:04:56
【问题描述】:

在我的项目中,我需要一个从 Alexa 数据创建 xml 输出并将整个结果解析为数组的函数。 我从第一个节点开始是这样的:

<?php
$url="samsung.com";
$xml = simplexml_load_file('http://data.alexa.com/data?cli=10&dat=snbamz&url='.$url);

$alex2 = array();

//Related links
if($foreach = $xml->xpath('//RLS[@PREFIX="http://"]/value'))
{
 foreach($foreach as $node)
{
$alex2['HREF'] = (string) $node;
}
}

print_r($alex2);

?>

但是 alex2 数组是空的。 示例中的xml输出是这样的:

<ALEXA VER="0.9" URL="samsung.com/" HOME="0" AID="=" IDN="samsung.com/">
<RLS PREFIX="http://" more="157">
<RL HREF="halla.com/" TITLE="Halla Engineering and Construction"/>
<RL HREF="daewoo.com/" TITLE="Daewoo"/>
<RL HREF="samsungusa.com/" TITLE="Samsungusa"/>
<RL HREF="samsungmobileusa.com/" TITLE="Welcome to Samsung Mobile USA"/>
<RL HREF="samsungmobile.com/" TITLE=":: Mobile Exciting!! - Samsung Fun Club :"/>
<RL HREF="samsung.nl/" TITLE="New URL"/>
<RL HREF="samsung.hu/" TITLE="Samsung Rt."/>
<RL HREF="samsung.fr/" TITLE="Samsung Electronics France"/>
<RL HREF="samsung.es/" TITLE="Samsung Electronica"/>
<RL HREF="samsung.de/" TITLE="Samsung Electronics GmbH"/>
<RL HREF="www.samsungtelecom.com/" TITLE="www.samsungtelecom.com/"/>
</RLS>
<SD TITLE="A" FLAGS="DMOZ" HOST="samsung.com">
<TITLE TEXT="Samsung Electronics"/>
<CREATED DATE="29-Nov-1994" DAY="29" MONTH="11" YEAR="1994"/>
<PHONE NUMBER="82 2 3415 6436, Fax: 02 3415 6652"/>
<OWNER NAME="Samsung Networks Inc."/>
<EMAIL ADDR="hostmstr@samsung.com"/>
<DOS>
<DO DOMAIN="adoptee.com" TITLE="adoptee.com"/>
<DO DOMAIN="hoammuseum.org" TITLE="hoammuseum.org"/>
<DO DOMAIN="how2lend.com" TITLE="how2lend.com"/>
<DO DOMAIN="samsung.com" TITLE="samsung.com"/>
<DO DOMAIN="samsung.net" TITLE="samsung.net"/>
<DO DOMAIN="samsungelectronics.com" TITLE="samsungelectronics.com"/>
</DOS>
[...]
</ALEXA>

有人知道吗?

提前致谢

【问题讨论】:

  • 您正在覆盖每个循环中的$alex2['HREF']。尝试在循环中添加print_r($alex2);。也许它在最后一个循环中被空值覆盖......
  • 在 foreach cicle 里面我试过 "$alex2['HREF'] .= (string) $node;"但没有任何改变
  • $xml-&gt;xpath('//RLS[@PREFIX="http://"]/value') 返回 FALSE 因此执行没有进入 if 和 foreach...
  • 什么是能够将 xml 解析为数组的最佳方法?
  • 如果您只是删除“/value”位,它将起作用。否则,使用Simple_Xml_Element::xpath() 是将 XML 数据转换为 PHP 数组的好方法。

标签: php xml arrays parsing alexa


【解决方案1】:

首先,&lt;RLS&gt; 元素具有 &lt;RL&gt; 子元素,因此您可以使用嵌套循环。然后,您必须提取属性信息,因为 HREF 是节点的属性而不是值。

<?php
$url="samsung.com";
$xmlDoc = simplexml_load_file('http://data.alexa.com/data?cli=10&dat=snbamz&url='.$url);
$alex2 = array();

//Related links
if($xml = $xmlDoc->xpath('//RLS[@PREFIX="http://"]')) {
  foreach($xml as $node) {
    foreach($node as $n) {
    $a = (array) $n->attributes();
    $alex2['HREF'][] =  $a['@attributes']['HREF'];
    }
  }
}

【讨论】:

    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多