繁体   English   中英

在PHP中读取XML时如何逃避冒号,simplexml

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM