Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
XPath和PHP疑难解答_Php_Xpath - Fatal编程技术网

XPath和PHP疑难解答

XPath和PHP疑难解答,php,xpath,Php,Xpath,我得到这个错误: Notice: Trying to get property of non-object in 适用于: echo$result->Data 这个输出: Array () 背景信息 函数返回包含XML文件的字符串 我想从两个标签中获取一些数据,并自己处理它们 字符串数据 $data=" <SyncML xmlns='SYNCML:SYNCML1.0'> <SyncHdr> </SyncHdr> <SyncBody>

我得到这个错误:

Notice: Trying to get property of non-object in
适用于: echo$result->Data

这个输出:

Array ()
背景信息

函数返回包含XML文件的字符串

我想从两个标签中获取一些数据,并自己处理它们

字符串数据

$data="
<SyncML xmlns='SYNCML:SYNCML1.0'> 
<SyncHdr> 
</SyncHdr> 
<SyncBody> 
   <betameta>
         WANT 1
   </betameta> 
   <Add> 
      <Data>
         WANT 2
      </Data>
   </Add> 
</SyncBody> 
</SyncML>";

删除尾部斜杠。

我能找到的唯一解决方案是:

<?php

$data= <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<SyncML> 
<SyncHdr> 
</SyncHdr> 
<SyncBody> 
   <betameta>
         WANT 1
   </betameta> 
   <Add> 
      <Data>
         WANT 2
      </Data>
   </Add> 
</SyncBody> 
</SyncML>
XML;

$xml = simplexml_load_string($data);
$result = $xml->xpath("/SyncML/SyncBody");
print_r($result);
echo $result;

谢谢,这样做了,现在我得到了“Array()”是的,访问数组中的项0以获得唯一的结果;这不会输出数组中的所有条目吗?也许您需要指定在xmlns属性中声明的名称空间?太棒了!我要把这些东西切掉!谢谢你,马丁@索钦:我不推荐这个。处理名称空间非常简单(参见Rik的答案)。+1,比从源代码中删除名称空间要好得多。
<?php

$data= <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<SyncML> 
<SyncHdr> 
</SyncHdr> 
<SyncBody> 
   <betameta>
         WANT 1
   </betameta> 
   <Add> 
      <Data>
         WANT 2
      </Data>
   </Add> 
</SyncBody> 
</SyncML>
XML;

$xml = simplexml_load_string($data);
$result = $xml->xpath("/SyncML/SyncBody");
print_r($result);
echo $result;
Array
(
    [0] => SimpleXMLElement Object
        (
            [betameta] => 
         WANT 1

            [Add] => SimpleXMLElement Object
                (
                    [Data] => 
         WANT 2

                )

        )

)
$xml->registerXPathNamespace('default','SYNCML:SYNCML1.0');
$result = $xml->xpath("/default:SyncML/default:SyncBody");