【问题标题】:How do I parse XML containing custom namespaces using SimpleXML? [duplicate]如何使用 SimpleXML 解析包含自定义命名空间的 XML? [复制]
【发布时间】:2010-11-11 03:48:03
【问题描述】:

我想知道如何解析 XML 中名称中包含 : 的值。我一直在使用:

$response   = file_get_contents($url);
$data = simplexml_load_string($response);

然后做一个:

foreach($data->item as $key => $current){

但是,我收到的最新提要之一的提要名称中有冒号,如下例所示:

<item>
  <title>foo</title>
  <description>foo</description>           
  <ccc:fid>10</ccc:fid>
  <ccc:bid>6</ccc:bid>
 </item>

当我尝试创建 $current->ccc:bid 时,php 并不高兴(理所当然)。有没有办法解决这个问题?

【问题讨论】:

    标签: php xml namespaces


    【解决方案1】:

    带有冒号的元素使用namespace prefixes,它是完全有效的XML。当同时使用多个模式时,名称空间有助于区分具有相同名称的元素。 PHP 中 SimpleXMLElement 对象的处理方式,基本上可以忽略冒号前的部分:

    $current->fid;
    

    如果您确实想找出元素名称的命名空间部分,您可以这样做:

    $current->fid->getNamespaces();
    

    【讨论】:

      【解决方案2】:

      ccc:fid 的用法是命名空间的扩展,需要在 xml 中声明才能在 simplexml 等库中使用它。

      以下是命名空间中的一些描述示例:

      希望对您有所帮助,尽管它有点复杂。

      【讨论】:

      • 干杯,不知道名称空间。谢谢!
      【解决方案3】:

      “ccc”是一个命名空间——你应该可以这样做

      $current->fid
      

      【讨论】:

        猜你喜欢
        • 2011-01-02
        • 2010-10-10
        • 2013-04-30
        • 1970-01-01
        • 2016-09-22
        相关资源
        最近更新 更多