GVKun编程网logo

php – 如何处理警告:SimpleXMLElement :: __ construct()?(php警告框)

16

本文将为您提供关于php–如何处理警告:SimpleXMLElement::__construct()?的详细介绍,我们还将为您解释php警告框的相关知识,同时,我们还将为您提供关于PHPobject

本文将为您提供关于php – 如何处理警告:SimpleXMLElement :: __ construct()?的详细介绍,我们还将为您解释php警告框的相关知识,同时,我们还将为您提供关于PHP object(SimpleXMLElement) 对象转换为数组、php simpleXMLElement to array:null value、PHP SimpleXMLElement::__toString SimpleXML 函数、PHP SimpleXMLElement:XML文件解析和读写的实用信息。

本文目录一览:

php – 如何处理警告:SimpleXMLElement :: __ construct()?(php警告框)

php – 如何处理警告:SimpleXMLElement :: __ construct()?(php警告框)

我在本地主机运行时遇到此错误,如果互联网断开连接(如果互联网连接正常)我想处理此错误,“错误可以显示”但是想要在PHP页面上处理不致命的错误中断.

Warning: SimpleXMLElement::__construct() [simplexmlelement.--construct]:
  PHP_network_getaddresses: getaddrinfo Failed: No such host is kNown.
  in F:\xampp\htdocs\shoptpoint\sections\docType_head_index.PHP on line 30

但我正在尝试使用try-catch处理.以下是我的代码

$apiurl="http://publisher.usb.api.shopping.com/publisher/3.0/rest/GeneralSearch?apiKey=78b0db8a-0ee1-4939-a2f9-d3cd95ec0fcc&trackingId=7000610&categoryId='5855855'";

try{
  new SimpleXMLElement($apiurl,null, true);
}catch(Exception $e){
  echo $e->getMessage();
}

如何处理错误,我的页面可以执行项目结束?

解决方法:

使用set_error_handler,您可以执行以下操作将SimpleXMLElement引发的任何通知/警告转换为可捕获的异常.

请考虑以下事项: –

<?PHP
function getData() {
    return new SimpleXMLElement('http://10.0.1.1', null, true);
}

$xml = getData();

/*
    PHP Warning:  SimpleXMLElement::__construct(http://10.0.1.1): Failed to open stream: Operation timed out
    PHP Warning:  SimpleXMLElement::__construct(): I/O warning : Failed to load external entity "http://10.0.1.1"
    PHP Fatal error:  Uncaught exception 'Exception' with message 'String Could not be parsed as XML'
*/

看看我们如何在抛出SimpleXMLElement异常之前得到2个警告?好吧,我们可以将这些转换为这样的异常: –

<?PHP
function getData() {

    set_error_handler(function($errno, $errstr, $errfile, $errline) {
        throw new Exception($errstr, $errno);
    });

    try {
        $xml = new SimpleXMLElement('http://10.0.1.1', null, true);
    }catch(Exception $e) {
        restore_error_handler();
        throw $e;
    }

    return $xml;
}

$xml = getData();

/*
    PHP Fatal error:  Uncaught exception 'Exception' with message 'SimpleXMLElement::__construct(http://10.0.1.1): Failed to open stream: Operation timed out'
*/

祝好运,

安东尼.

PHP object(SimpleXMLElement) 对象转换为数组

PHP object(SimpleXMLElement) 对象转换为数组

跳至 [1] [2] [全屏预览]
object(SimpleXMLElement)[9]  
public ''result'' => 
    object(SimpleXMLElement)[8]      
      public ''err_code'' => string ''0'' (length=1)
      public ''model'' => string ''000000000000^000000000000'' (length=26)
      public ''success'' => string ''true'' (length=4)
  public ''request_id'' => string ''000000000000'' (length=13)
登录后复制

php simpleXMLElement to array:null value

php simpleXMLElement to array:null value

我有以下 XML:
<account>
    <id>123</id>
    <email></email>
    <status>ACTIVE</status>
</account>

我想把它作为一个数组变量.因此我用$xml = simplexml_load_file()读取它.将simpleXMLElement转换为关联数组的最简单方法是使用:json_decode(json_encode((array)$xml),1);

问题是我不想将电子邮件密钥作为空数组,而是作为NULL值.作为SimpleXMLElement,它看起来像:

public 'email' => 
    object(SimpleXMLElement)[205]

而在数组中它看起来像:

'email' => 
    array (size=0)
      empty

我想得到:

'email' => NULL

实现这一点的唯一方法我想到的是遍历所有元素并用空值替换空数组.问题是我的XML更大(上面只是解释问题)而且我必须迭代很多XML元素(这将是手工工作 – 我正在寻找一些自动化的东西).也许我错过了其中一个功能中的一些选项…或者可能还有另一个技巧可以做到这一点?

我无法添加评论,但我认为这对您有用,它应该比正则表达式或循环更快:
//after you json_encode,before you decode
$str = str_replace(':[]',':null',json_encode($array));

JSON中的空数组由“[]”表示.有时,数组被解析为对象,在这种情况下(或作为后备),您也可以替换“:{}”.

PHP SimpleXMLElement::__toString SimpleXML 函数

PHP SimpleXMLElement::__toString SimpleXML 函数

定义和用法

SimpleXMLElement::__toString - 返回字符串内容

版本支持

PHP4 PHP5 PHP7
不支持 支持 支持

语法

SimpleXMLElement::__toString ( void )

返回直接在此元素中的文本内容。 不返回该元素的子元素内的文本内容。

返回值

成功时返回 TRUE, 或者在失败时返回 FALSE。

示例

$xml = new SimpleXMLElement(''<a>1 <b>2 </b>3</a>'');
echo $xml;  // 隐式的调用了toString方法

相关函数

SimpleXMLElement::asXML() - 返回基于SimpleXML元素的格式正确的XML字符串

  

PHP SimpleXMLElement:XML文件解析和读写

PHP SimpleXMLElement:XML文件解析和读写

php保存xml文件

<span>$xml</span><span>=</span><span>new</span> SimpleXMLElement(<span>XML</span>数据);
        <span>$xml</span><span>-&gt;</span>asXML(文件名);
登录后复制

PHP读取XML文件

<span>XXX</span>=<span> simplexml_load_file(文件名);</span>
登录后复制


1.使用面向对象方式访问XML

<span><?php </span><span><span>class</span><span>XmlTest</span>
{</span><span>private</span><span>$filename</span> = <span>"a.xml"</span>;
    <span>private</span><span>$isreading</span>=<span>false</span>;
    <span>private</span><span>$rxml</span>;

<span>//创建XML文件</span><span>public</span><span><span>function</span><span>writeTest</span><span>()</span>
{</span><span>$_data</span> = <span>
<root><data>A</data><data>B</data><data>C</data><from><name fristname="陈">老四</name><arg>30</arg></from><heading>Reminder</heading>Don''t forget the meeting!
</root>
data;</span><span>$xml</span> = <span>new</span> SimpleXMLElement(<span>$_data</span>);
        <span>$xml</span>-&gt;asXML(<span>$this</span>-&gt;filename);
    }
    <span>//读取文件</span><span>private</span><span><span>function</span><span>readFile</span><span>()</span>
    {</span><span>if</span>(!<span>$this</span>-&gt;isreading)
        {
            <span>$this</span>-&gt;rxml= simplexml_load_file(<span>$this</span>-&gt;filename);
            <span>$this</span>-&gt;isreading=<span>true</span>;
        }
    }
    <span>//测试:遍历某一数组</span><span>public</span><span><span>function</span><span>readdata</span><span>()</span>
    {</span><span>$this</span>-&gt;readFile();
        <span>foreach</span> (<span>$this</span>-&gt;rxml-&gt;data <span>as</span><span>$x</span>) {
            <span>echo</span><span>"["</span>.<span>$x</span>.<span>"]"</span>;

        }
        <span>echo</span><span>"<br>"</span>;
    }
    <span>//测试 用数组下标读取数组某一项</span><span>public</span><span><span>function</span><span>readdata1</span><span>()</span>
    {</span><span>$this</span>-&gt;readFile();
        <span>echo</span><span>"读取第[1]个data数据:"</span>;
        <span>echo</span><span>$this</span>-&gt;rxml-&gt;data[<span>1</span>] .<span>"<br>"</span>;
    }
    <span>//测试:读取2级XML节点</span><span>public</span><span><span>function</span><span>readfrom</span><span>()</span>
    {</span><span>$this</span>-&gt;readFile();
        <span>echo</span><span>"读取from节点:"</span>;
        <span>echo</span><span>$this</span>-&gt;rxml-&gt;from-&gt;name .<span>'',''</span>;
        <span>echo</span><span>$this</span>-&gt;rxml-&gt;from-&gt;arg.<span>"<br>"</span>;
                <span>//读取name节点的fristname属性</span><span>echo</span><span>$this</span>-&gt;rxml-&gt;from-&gt;name[<span>''fristname''</span>].<span>"<br>"</span>;
    }
}


<span>$tmp</span> = <span>new</span> XmlTest();
<span>$tmp</span>-&gt;writeTest();
<span>$tmp</span>-&gt;readdata();
<span>$tmp</span>-&gt;readdata1();
<span>$tmp</span>-&gt;readfrom();

<span>?&gt;</span></span>
登录后复制

浏览器打印:

立即学习“PHP免费学习笔记(深入)”;

点击下载“修复打印机驱动工具”;

[<span>A</span>][<span>B</span>][<span>C</span>]
读取第[1]个data数据:B
读取from数据:老四,30
陈
登录后复制


2.使用xpath访问XML., 用路径获取节点,区别:获取的节点都以数组返回,因此用数组下标访问

<span>public</span><span><span>function</span><span>readdata_xpath</span><span>()</span> {</span><span>$this</span>-&gt;readFile();
        <span>$data</span>= <span>$this</span>-&gt;rxml-&gt;xpath(<span>''/root/data''</span>);
        <span>foreach</span> (<span>$data</span><span>as</span><span>$x</span>) {
            <span>echo</span><span>"["</span>.<span>$x</span>.<span>"]"</span>;

        }
        <span>echo</span><span>"<br>"</span>;
    }
    <span>public</span><span><span>function</span><span>readdata1_xpath</span><span>()</span>
    {</span><span>$this</span>-&gt;readFile();
        <span>$data1</span> =  <span>$this</span>-&gt;rxml-&gt;xpath(<span>''/root/data''</span>);
        <span>echo</span><span>"读取第[1]个data数据:"</span>;
        <span>echo</span><span>$data1</span>[<span>1</span>] .<span>"<br>"</span>;
    }
    <span>public</span><span><span>function</span><span>readfrom_xpath</span><span>()</span>
    {</span><span>$this</span>-&gt;readFile();
        <span>$name</span>= <span>$this</span>-&gt;rxml-&gt;xpath(<span>''/root/from/name''</span>);
        <span>$arg</span>= <span>$this</span>-&gt;rxml-&gt;xpath(<span>''/root/from/arg''</span>);
        <span>echo</span><span>"读取from数据:"</span>; 
        <span>echo</span><span>$name</span>[<span>0</span>] .<span>'',''</span>;
        <span>echo</span><span>$arg</span>[<span>0</span>].<span>"<br>"</span>;
        <span>//读取name节点的fristname属性</span><span>echo</span><span>$name</span>[<span>0</span>][<span>''fristname''</span>].<span>"<br>"</span>;
    }
登录后复制
$tmp-&gt;readdata_xpath();
$tmp-&gt;readdata1_xpath();
$tmp-&gt;readfrom_xpath();

<span>*****</span><span>*****</span><span>*****</span><span>***</span>
浏览器打印:
[<span>A</span>][<span>B</span>][<span>C</span>] 
读取第[1]个data数据:B 
读取from数据:老四,30 
陈
登录后复制
'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了 PHP SimpleXMLElement:XML文件解析和读写,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

关于php – 如何处理警告:SimpleXMLElement :: __ construct()?php警告框的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于PHP object(SimpleXMLElement) 对象转换为数组、php simpleXMLElement to array:null value、PHP SimpleXMLElement::__toString SimpleXML 函数、PHP SimpleXMLElement:XML文件解析和读写的相关知识,请在本站寻找。

本文标签: