如何使用SimpleXMLElement和多个名称空间解析XML文件?

时间:2012-12-03 18:00:02

标签: php xml parsing namespaces simplexml

我有一个类似于此网站示例的XML文件:http://msdn.microsoft.com/en-us/library/ee223815(v=sql.105).aspx

我正在尝试使用以下内容解析XML文件:

$data = file_get_contents('http://mywebsite here');
$xml = new SimpleXMLElement($data);
$str = $xml->Author;
echo $str;

不幸的是,这不起作用,我怀疑它是由命名空间引起的。我可以使用asXML()转储$ xml并正确显示XML数据。

我知道我需要以某种方式插入名称空间,但我不确定如何。如何解析这种类型的XML文件?

1 个答案:

答案 0 :(得分:3)

您只需要注册命名空间

$sxe = new SimpleXMLElement($data);
$sxe->registerXPathNamespace("diffgr", "urn:schemas-microsoft-com:xml-diffgram-v1");
$data = $sxe->xpath("//diffgr:diffgram") ;
$data = $data[0];
echo "<pre>";
foreach($data->Results->RelevantResults as $result)
{
    echo $result->Author , PHP_EOL ;
}

输出

Ms.Kim    Abercrombie
Mr.GustavoAchong
Mr. Samuel N. Agcaoili

See Full code In Action