首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向XML传递PHP关联数组以及从XML传递PHP关联数组

向XML传递PHP关联数组以及从XML传递PHP关联数组
EN

Stack Overflow用户
提问于 2008-09-19 03:39:11
回答 14查看 29.7K关注 0票数 17

有没有一种简单的方法可以将PHP关联数组编组到XML或从XML编组?例如,我有以下数组:

$items = array("1", "2",
    array(
        "item3.1" => "3.1",
        "item3.2" => "3.2"
        "isawesome" => true
    )
);

如何在尽可能少的行数中将其转换为类似于下面的XML的内容,然后再返回?

<items>
    <item>1</item>
    <item>2</item>
    <item>
        <item3_1>3.1</item3_1>
        <item3_2>3.2</item3_2>
        <isawesome>true</isawesome>
    </item>
</items>

我并不关心是否必须稍微更改数组结构,或者生成的XML是否与上面的示例不同。我一直在尝试使用PHP的XMLReaderXMLWriter,但是文档太差了,所以我生成的代码看起来一点也不像我认为的样子:

$xml = SomeXMLWriter::writeArrayToXml($items);
$array = SomeXMLWriter::writeXmlToArray($xml);

在不编写自己的自定义类的情况下,获得PHP数组的基本原始XML转储真的比这更难吗?

我尽量避免吃梨。除了我使用它时遇到的配置问题之外,我从来没有使用过任何我曾经使用过的包。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2009-08-07 09:32:32

对于那些没有使用PEAR包的人来说,但是您已经安装了PHP5。这对我很有效:

/**
 * Build A XML Data Set
 *
 * @param array $data Associative Array containing values to be parsed into an XML Data Set(s)
 * @param string $startElement Root Opening Tag, default fx_request
 * @param string $xml_version XML Version, default 1.0
 * @param string $xml_encoding XML Encoding, default UTF-8
 * @return string XML String containig values
 * @return mixed Boolean false on failure, string XML result on success
 */
public function buildXMLData($data, $startElement = 'fx_request', $xml_version = '1.0', $xml_encoding = 'UTF-8') {
    if(!is_array($data)) {
        $err = 'Invalid variable type supplied, expected array not found on line '.__LINE__." in Class: ".__CLASS__." Method: ".__METHOD__;
        trigger_error($err);
        if($this->_debug) echo $err;
        return false; //return false error occurred
    }
    $xml = new XmlWriter();
    $xml->openMemory();
    $xml->startDocument($xml_version, $xml_encoding);
    $xml->startElement($startElement);

    /**
     * Write XML as per Associative Array
     * @param object $xml XMLWriter Object
     * @param array $data Associative Data Array
     */
     function write(XMLWriter $xml, $data) {
         foreach($data as $key => $value) {
             if(is_array($value)) {
                 $xml->startElement($key);
                 write($xml, $value);
                 $xml->endElement();
                 continue;
             }
             $xml->writeElement($key, $value);
         }
     }
     write($xml, $data);

     $xml->endElement();//write end element
     //Return the XML results
     return $xml->outputMemory(true); 
}
票数 6
EN

Stack Overflow用户

发布于 2008-09-19 03:44:52

SimpleXML非常适合您的使用。

票数 13
EN

Stack Overflow用户

发布于 2011-09-07 17:49:40

class Xml {

    public static function from_array($arr, $xml = NULL)
    {
        $first = $xml;
        if($xml === NULL) $xml = new SimpleXMLElement('<root/>');
        foreach ($arr as $k => $v) 
        {
            is_array($v)
                ? self::from_array($v, $xml->addChild($k))
                : $xml->addChild($k, $v);
        }
        return ($first === NULL) ? $xml->asXML() : $xml;
    }

    public static function to_array($xml)
    {
        $xml = simplexml_load_string($xml);
        $json = json_encode($xml);
        return json_decode($json,TRUE);
    }

}

$xml = xml::from_array($array);
$array = xml::to_array($xml);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/99350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档