是否可以作为多维数组访问xml数据?

时间:2010-02-11 06:08:24

标签: php xml

我有一个基本的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>

3 个答案:

答案 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;