dopgl80062 2018-02-16 07:10
浏览 48
已采纳

如何在PHP中从XML(快速信息文档)中获取所有子标签

I have problem in code when i parse the XML to Array.it returns some tags and not the complete tags.I want to get all tags inside in soap response.I have xml file.and upload this file.

Here is data.txt file below:

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="<a rel="nofollow" class="external free" href="http://schemas.xmlsoap.org/soap/envelope/">http://schemas.xmlsoap.org/soap/envelope/</a>"
  xmlns="urn:enterprise.soap.sforce.com">
  <soapenv:Body>
     <retrieveResponse>
        <result xsi:type="sf:sObject">
           <id>123</id>
           <description>description</description>
           <name>testing</imran>
           <cnic>23198398213</cnic>
        </result>
     </retrieveResponse>
  </soapenv:Body>
</soapenv:Envelope>

My PHP code:

<?php
    ini_set("memory_limit", "44879M");
    include("dom.php");
    $xml = str_get_html( file_get_contents("data.txt") );
    $final = array();
    $result = $xml->find("result");
    foreach($result as $r){

        $tag = $r->children();
        $one = array();
        foreach($tag as $child){
            $tag = $child->tag;
            echo "<pre>";
            print_r($tag); echo "<br>";

            if( stristr($tag, ":") ){
                list($com, $tag) = explode(":", $tag);

            }
            $one[$tag]  =  trim(strip_tags($child->innertext));
        }
        $final[] = $one;
        //print_r($final); exit;
    }
    print_r($final);
?>

My output:

id
description
name
Array
(
    [0] => Array
        (
            [id] => 123
            [description] => description
            [name] => testing             23198398213
        )
)

My expected output should:

id
description
name
cnic
Array
(
    [0] => Array
        (
            [id] => 123
            [description] => description
            [name] => testing   
            [cnic] =>   23198398213       
        )
)

Please help

Thanks in Advance.

  • 写回答

1条回答 默认 最新

  • dongwei9771 2018-02-16 07:31
    关注

    The problem is caused by simple_html_dom trying to correct your XML. There are a few issues with it and if they were resolved, you could load it much more efficiently with either DOMDocument or SimpleXML.

    If you corrected the element

    <name>testing</imran>
    

    as the html parser is trying to correct the structure, it's taking this and the <cnic> element as one piece of data. Change this to

    <name>testing</name>
    

    and your output changes to...

    <pre>id<br><pre>description<br><pre>name<br><pre>cnic<br>Array
    (
        [0] => Array
            (
                [id] => 123
                [description] => description
                [name] => testing
                [cnic] => 23198398213
            )
    
    )
    

    If you corrected your XML, then you could do the following (XML included)...

    $data = <<< XML
    <?xml version="1.0" encoding="utf-8"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
        xmlns="urn:enterprise.soap.sforce.com">
      <soapenv:Body>
         <retrieveResponse>
            <result xsi:type="sf:sObject">
               <id>123</id>
               <description>description</description>
               <name>testing</name>
               <cnic>23198398213</cnic>
            </result>
         </retrieveResponse>
      </soapenv:Body>
    </soapenv:Envelope>
    XML;
    
    $xml = new SimpleXMLElement($data);
    $xml->registerXPathNamespace("def", "urn:enterprise.soap.sforce.com");
    $result = $xml->xpath("//def:result");
    $final = array();
    foreach ( $result[0]->children() as $element ) {
        $final [ $element->getName() ] = (string)$element;
    }
    print_r($final);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办