Php 从xml文件获取数据

Php 从xml文件获取数据,php,xml,Php,Xml,在php脚本中,如何读取XML文档并将其转换为对象,并访问获取的对象以获取其数据 <?php $xml ='<?xml version="1.0" encoding="UTF-8" ?> <data request-id="ID"> <data name="Name1" d1="0" d2="0231234" d3="32584"> <data name="Name2" d4="231234"

在php脚本中,如何读取XML文档并将其转换为对象,并访问获取的对象以获取其数据

<?php
$xml ='<?xml version="1.0" encoding="UTF-8" ?>
<data request-id="ID">
<data name="Name1"
    d1="0"
    d2="0231234"
    d3="32584">
    <data name="Name2"
        d4="231234"
        d5="2012-06-06 18:18:10.000607"
        d6="3b048653-aaa9-485b-b0dd-d16e068230e9" />
    </data>
</data>';
$xml = simplexml_load_string($xml); 
//how to get the data d1? or d4? from the obtained object
?> 

使用


参考:

尝试使用此功能-

$xml ='<?xml version="1.0" encoding="UTF-8" ?>
<data request-id="ID">
<data name="Name1"
    d1="0"
    d2="0231234"
    d3="32584">
    <data name="Name2"
        d4="231234"
        d5="2012-06-06 18:18:10.000607"
        d6="3b048653-aaa9-485b-b0dd-d16e068230e9" />
    </data>
</data>';
function xmlToArray($input, $callback = null, $recurse = false) {
                    $data = ((!$recurse) && is_string($input))? simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA): $input;
                    if ($data instanceof SimpleXMLElement) $data = (array) $data;
                    if (is_array($data)) foreach ($data as &$item) $item = xmlToArray($item, $callback, true);
                    return (!is_array($data) && is_callable($callback))? call_user_func($callback, $data): $data;
            }
$xml = xmlToArray($xml);
echo $xml['data']['@attributes']['d1'];
echo '<br/>';
echo $xml['data']['data']['@attributes']['d4'];
$xml='1!'
';
函数xmlToArray($input,$callback=null,$recurse=false){
$data=(!$recurse)和&is_string($input))?simplexml_load_string($input,'simplexmlement',LIBXML_NOCDATA):$input;
if($data instanceof SimpleXMLElement)$data=(数组)$data;
if(is_array($data))foreach($data as&$item)$item=xmlToArray($item,$callback,true);
返回(!is_数组($data)&&is_可调用($callback))?调用用户函数($callback,$data):$data;
}
$xml=xmlToArray($xml);
echo$xml['data']['@attributes']['d1'];
回声“
”; echo$xml['data']['data']['@attributes']['d4'];
试试:-

echo $xml['data']['@attributes']['d1'];
echo '<br/>';
echo $xml['data']['data']['@attributes']['d4'];
echo$xml['data']['@attributes']['d1'];
回声“
”; echo$xml['data']['data']['@attributes']['d4'];
您可以使用以下代码段:

<?php
$xmlstring = file_get_contents($filename);
$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$object = json_decode($json);

如果可行,您可以尝试:$xml=simplexml\u load\u file('xml file');$deJson=json_encode($xml);这是可行的,但是你能解释一下函数的逻辑吗?我想将此标记为可接受的答案,但我只认为有一种直接而简单的方法可以获取xml文件的数据是一个解析xml内容并将其转换为php数组的函数,您可以轻松获得输出。我知道这个函数可以将xml文件转换为数组,这样从数组元素获取数据就更容易了,但我的意思是,为什么不使用一个已定义的函数将xml文件转换为simplexml\u load\u string()之类的对象呢功能是的,这是此功能的替代方案。使用simplexml_load_string(),必须使对象获取值。
<?php
$xmlstring = file_get_contents($filename);
$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$object = json_decode($json);