我有一个基本的XML文件,我使用
加载到我的PHP中$xml = simplexml_load_file("file.xml");
我希望能够使用类似于以下语法的方式访问我的数据:
$xml[0]['from'];
$xml['note']['from'];
$xml['from']['email'];
我知道我可以使用以下方式访问数据:
foreach($xml->children() as $child) {
echo $child->getName() . ": " . $child . "<br />";
}
但是,这不是首选方法,我想使用类似于多维数组的语法。
使用来自许多不同网站的API,这通常是我访问XML的方式,但是,我似乎无法使用自己使用simplexml_load_file("file.xml");
我知道这很简单,但有什么我想念的吗?请帮忙!提前致谢
XML文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>
<name>Jani</name>
<email>email@email.com</email>
</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
答案 0 :(得分:1)
不幸的是,除非您自己解析xml文件,否则无法执行此操作。任何访问其中一个节点的尝试都很可能会返回一个DOM错误,说明它无法转换为字符串。
你可以看一下这篇文章:http://bytes.com/topic/php/answers/1364-turn-xml-into-2-dimensional-array。
如果这是你真正需要做的事情,你可能需要自己做一个额外的步骤,比如创建一个函数或类来处理它。
答案 1 :(得分:1)
我认为它不是一个完美的解决方案,但它可以帮助你解决问题。
XML文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>
<name>Jani</name>
<email>email@email.com</email>
</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
PHP文件:
<?php
$xml = simplexml_load_file("new.xml");
$webroot="http://".$_SERVER['HTTP_HOST']."/";
$doc = new DOMDocument();
$doc->load( $webroot.'/new.xml' );
$note = $doc->getElementsByTagName( "note" );
$final_arr = array();
$i=0;
foreach($note as $note)
{
$to = $note->getElementsByTagName( "to" );
$to = $to->item(0)->nodeValue;
$final_arr[$i]['to'] = $to;
$from = $note->getElementsByTagName( "from" );
foreach($from as $from)
{
$name = $from->getElementsByTagName( "name" );
$name = $name->item(0)->nodeValue;
$final_arr[$i]['from']['name'] = $name;
$email = $from->getElementsByTagName( "email" );
$email = $email->item(0)->nodeValue;
$final_arr[$i]['from']['email'] = $email;
}
$heading = $note->getElementsByTagName( "heading" );
$heading = $heading->item(0)->nodeValue;
$final_arr[$i]['heading'] = $heading;
$body = $note->getElementsByTagName( "body" );
$body = $body->item(0)->nodeValue;
$final_arr[$i]['body'] = $body;
$i++;
}
echo "<pre>";
print_r($final_arr);
echo "</pre>";
?>
希望这适合你。
答案 2 :(得分:0)
“我想将语法类似用于多维数组。” - 我不知道它是否足够相似:$notes->note[0]->to;
和
<?php
$notes = new SimpleXMLElement('<?xml version="1.0" encoding="ISO-8859-1"?>
<notes>
<note>
<to>Tove</to>
<from>
<name>Jani</name>
<email>email@email.com</email>
</from>
<heading>Reminder</heading>
<body>Don\'t forget me this weekend!</body>
</note>
<note>...</note>
<note>...</note>
</notes>');
echo $notes->note[0]->to;