[英]How to escape colon when reading XML in PHP, simplexml
我有一个XML文件,我试图通过PHP获取变量。 XML文件如下所示:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dcq="http://purl.org/dc/terms/" xmlns="http://www.skype.com/go/skypeweb">
<Status rdf:about="urn:skype:skype.com:skypeweb/1.1">
您可以在此处查看完整的XML文件: http : //mystatus.skype.com/username.xml
我使用simplexml扩展将xml输入转换为PHP对象$xml
。 当我尝试稍后在文件中导航时:
$variable = $xml->rdf:RDF->Status->presence;
由于“rdf:RDF”中的冒号,它给我一个错误:
解析错误:语法错误,意外':'
如何在不更改XML文件的情况下转义冒号,或稍后在文件中导航?
如果我没弄错的话,simplexml会从文档(顶部)元素开始,因此在这种情况下你不需要担心rdf:RDF。 你试一试:
$xml->Status->presence
通常,访问具有特定命名空间的节点的方式似乎是使用 - > children(namespaceUri),如:
$xml->children('http://www.w3.org/2005/Atom')->entry->title
对于这样的事情:
<a:feed xmlns:a="http://www.w3.org/2005/Atom">
<a:entry>
<a:title>hello</a:title>
</a:entry>
</a:feed>
你的初始代码:
$variable = $xml->rdf:RDF->Status->presence;
不起作用,因为它正在创建语法错误 :
解析错误:语法错误,第8行/test.php中的意外':'
属性名称中的冒号无效。 PHP的常用方法是使用花括号:
$xml->{'rdf:RDF'}->Status->presence
当你发现你得到未定义的财产通知时:
注意:尝试在第8行的/test.php中获取非对象的属性
这是第一手因为这样的属性不存在, var_dump
显示:
var_dump($xml);
class SimpleXMLElement#1 (1) {
public $Status =>
class SimpleXMLElement#2 (2) {
public $statusCode =>
string(1) "1"
public $presence =>
array(13) {
[0] =>
string(1) "1"
...
}
}
}
但是,除此之外,即使有一个带有名称空间前缀元素名称的子代,它也不会那样工作。 这将永远不会工作,所以总是没有定义这样的属性。
但是什么以前的转储概括是 ,有你要找的属性: $Status
:
$variable = $xml->Status->presence;
所以你只是在错误的地方寻找。 var_dump($variable)
是:
class SimpleXMLElement#4 (13) {
string(1) "1"
string(7) "Offline"
string(12) "Déconnecté"
string(7) "Offline"
string(15) "オフライン"
string(6) "離線"
string(6) "脱机"
string(7) "Offline"
string(7) "Offline"
string(12) "Non in linea"
string(12) "Desconectado"
string(15) "Niepodłączony"
string(7) "Offline"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.