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");