Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-如何解析此xml?_Php_Xml_Parsing - Fatal编程技术网

PHP-如何解析此xml?

PHP-如何解析此xml?,php,xml,parsing,Php,Xml,Parsing,我正试图解析下面的XML,这样我就得到了一个数组,看起来像包含的示例。。。我很难弄清楚如何让标签中的属性以我想要的方式输出 XML文件 <cust rid="999999" memberid="12345" lname="Doe" fname="John"> <address memberid="12345" address1="1234 Mockingbird Lane" address2="" city="Oakland" state="CA" zip="91111

我正试图解析下面的XML,这样我就得到了一个数组,看起来像包含的示例。。。我很难弄清楚如何让标签中的属性以我想要的方式输出

XML文件

<cust rid="999999" memberid="12345" lname="Doe" fname="John">
    <address memberid="12345" address1="1234 Mockingbird Lane" address2="" city="Oakland" state="CA" zip="91111" country="United States"/>
    <phone memberid="12345" phonenumber="415.555.1212" countrycodeid="1" phonetype="Mobile"/>
    <custcode memberid="12345" ccode="Silver" deleted=”1”/>
    <custcode memberid="12345" ccode="Gold"/> 
</cust>

你应该试试使用。注释中有几个dom2array函数,如果它们不适合您,它们可以为您提供进一步的想法。

您应该尝试使用。注释中有几个dom2array函数,如果它们不适用于您,它们可以为您提供进一步的想法。

您可以使用DOMDocument及其字段/方法提取数据

DOMDocument也是DOMNode,它有一个名为attributes的字段,是属性名和值节点的映射,因此您可以从中获取属性名和值(#6-9)。 每个节点ALO都有第一个子节点和下一个子节点,您可以在所有子节点(#12-26)中导航

从中可以相应地创建数据数组。下面是我使用的代码(稍作调整)

/*01*/函数解析($XMLNode,$XMLData=null){
/*02*/if($XMLData==null)
/*03*/$XMLData=array();
/*04*/     
/*05*///将属性提取为数组值
/*06*/if($XMLNode->hasAttributes()){
/*07*/foreach($XMLNode->属性为$AttrName=>$AttrNode)
/*08*/$XMLData[$AttrName]=$AttrNode->nodeValue;
/*09*/     }
/*10*/     
/*11*///循环所有子对象
/*12*/$Child=$XMLNode->firstChild;
/*13*/while($Child!=null){
/*14*/$Name=$Child->nodeName;
/*15*/if($Name!=“#text”){//忽略文本
/*16*/$Nodes=$XMLData[$Name];
/*17*/if($Nodes==null)
/*18*/$Nodes=array();//子节点的数组值是嵌套数组
/*19*/             
/*21*/$Nodes[]=Parse($Child);
/*22*/$XMLData[$Name]=$Nodes;
/*23*/         }
/*24*/         
/*25*/$Child=$Child->nextSibling;
/*26*/     }
/*27*/返回$XMLData;
/*28*/ }
/*29*/ 

/*31*/$XML=您可以使用DOMDocument及其字段/方法来提取数据

DOMDocument也是DOMNode,它有一个名为attributes的字段,是属性名和值节点的映射,因此您可以从中获取属性名和值(#6-9)。 每个节点ALO都有第一个子节点和下一个子节点,您可以在所有子节点(#12-26)中导航

从中可以相应地创建数据数组。下面是我使用的代码(稍作调整)

/*01*/函数解析($XMLNode,$XMLData=null){
/*02*/if($XMLData==null)
/*03*/$XMLData=array();
/*04*/     
/*05*///将属性提取为数组值
/*06*/if($XMLNode->hasAttributes()){
/*07*/foreach($XMLNode->属性为$AttrName=>$AttrNode)
/*08*/$XMLData[$AttrName]=$AttrNode->nodeValue;
/*09*/     }
/*10*/     
/*11*///循环所有子对象
/*12*/$Child=$XMLNode->firstChild;
/*13*/while($Child!=null){
/*14*/$Name=$Child->nodeName;
/*15*/if($Name!=“#text”){//忽略文本
/*16*/$Nodes=$XMLData[$Name];
/*17*/if($Nodes==null)
/*18*/$Nodes=array();//子节点的数组值是嵌套数组
/*19*/             
/*21*/$Nodes[]=Parse($Child);
/*22*/$XMLData[$Name]=$Nodes;
/*23*/         }
/*24*/         
/*25*/$Child=$Child->nextSibling;
/*26*/     }
/*27*/返回$XMLData;
/*28*/ }
/*29*/ 

/*31*/$XML=如果您使用的是PHP5,请使用。它比DOM更干净、更易于使用、速度更快。如果您使用的是PHP4,则必须使用而不是。

如果您使用的是PHP5,请使用。它比DOM更干净、更易于使用、速度更快。如果你使用PHP 4,你必须使用而不是.

NaWaMAN的答案可能是你需要的,但是如果你想简化PHP DOM代码,你也可以考虑JQuery启发。

< Pn> NaWaMAN的答案可能是你需要的,但是如果你想简化PHP DOM代码,您也可以考虑jQuery启发。

Array
    [cust] => Array
        [rid] => 999999
        [member_id] => 12345
        [lname] => Doe
        [fname] => John
        [address] => Array
            [0] => Array
                [memberid] => 12345
                [address1] => 1234 Mockingbird Lane
                [address2] =>
                [city] => Oakland
                [state] => CA
                [zip] => 91111
                [country] => United States
        [phone] => Array
            [0] => Array
                [memberid] => 12345
                [phonenumber] => 415.555.1212
                [countrycodeid] => 1
                [phonetype] => Mobile
        [custcode] => Array
            [0] => Array
                [memberid] => 12345
                [ccode] => Silver
                [deleted] => 1
            [1] => Array
                [memberid] => 12345
                [ccode] => Gold
/*01*/ function Parse($XMLNode, $XMLData = null) {
/*02*/     if ($XMLData == null)
/*03*/     $XMLData = array();
/*04*/     
/*05*/     // Extract attribute as the array values
/*06*/     if ($XMLNode->hasAttributes()) {
/*07*/         foreach ($XMLNode->attributes as $AttrName => $AttrNode)
/*08*/             $XMLData[$AttrName] = $AttrNode->nodeValue;
/*09*/     }
/*10*/     
/*11*/     // Loop all child
/*12*/     $Child = $XMLNode->firstChild;
/*13*/     while ($Child != null) {
/*14*/         $Name = $Child->nodeName;
/*15*/         if ($Name != "#text") { // Ignore the text
/*16*/             $Nodes = $XMLData[$Name];
/*17*/             if ($Nodes == null)
/*18*/                 $Nodes = array();   // Array value from subnode is a nest array
/*19*/             
/*21*/             $Nodes[] = Parse($Child);
/*22*/             $XMLData[$Name] = $Nodes;
/*23*/         }
/*24*/         
/*25*/         $Child = $Child->nextSibling;
/*26*/     }
/*27*/     return $XMLData;
/*28*/ }
/*29*/ 
/*31*/ $XML = <<<EOF
/*32*/ <cust rid="999999" memberid="12345" lname="Doe" fname="John">
/*33*/     <address memberid="12345" address1="1234 Mockingbird Lane" address2="" city="Oakland" state="CA" zip="91111" country="United States" />
/*34*/     <phone memberid="12345" phonenumber="415.555.1212" countrycodeid="1" phonetype="Mobile" />
/*35*/     <custcode memberid="12345" ccode="Silver" deleted="1" />
/*36*/     <custcode memberid="12345" ccode="Gold" /> 
/*37*/ </cust>
/*38*/ EOF;
/*39*/ 
/*41*/ $DOC = new DOMDocument();
/*42*/ $DOC->loadXML($XML);
/*43*/ $Data = Parse($DOC->firstChild);
/*44*/ 
/*45*/ print_r($Data);