【问题标题】:SimpleXML and print_r() - why is this empty?SimpleXML 和 print_r() - 为什么这是空的?
【发布时间】:2010-06-24 10:56:51
【问题描述】:

您好,这是我的 xml 文件:(thefile)

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://nts-de-osm1-pxc/webservices/">
  <Item xmlns:q1="http://systinet.com/wsdl/com/osm/webservices/service/" xsi:type="q1:Document">

    <q1:attributes>
      <q1:Attribute>
        <q1:dataDictionary xsi:nil="true" />
        <q1:dataType>string</q1:dataType>
        <q1:displayName>AEND_DATUM</q1:displayName>
        <q1:key>false</q1:key>
        <q1:name>AEND_DATUM</q1:name>
        <q1:searchable>true</q1:searchable>
        <q1:userAttribute>true</q1:userAttribute>
        <q1:value>10.05.10</q1:value>
      </q1:Attribute>
      <q1:Attribute>
        <q1:dataDictionary xsi:nil="true" />
        <q1:dataType>string</q1:dataType>
        <q1:displayName>AEND_PRUEF_DATUM</q1:displayName>
        <q1:key>false</q1:key>
        <q1:name>AEND_PRUEF_DATUM</q1:name>
        <q1:searchable>true</q1:searchable>
        <q1:userAttribute>true</q1:userAttribute>
        <q1:value>10.05.10</q1:value>
      </q1:Attribute>
    </q1:attributes>
  </Item>
</ArrayOfItem>

这是我的代码

$xml = simplexml_load_file($thefile);
print_r($xml);

这是输出

SimpleXMLElement Object
(
    [Item] => SimpleXMLElement Object
        (
        )

)

为什么这是空的?

【问题讨论】:

    标签: php xml simplexml


    【解决方案1】:

    不要使用 print_r() 或 var_dump() 来检查 SimpleXMLElement,它们不一定对它们起作用,因为 SimpleXML 在幕后使用了很多魔法。相反,请查看 asXML() 返回的内容。

    在您的情况下,它不会显示 &lt;q1:attributes/&gt;,因为它们不在同一个命名空间中。

    编辑

    要访问这些命名空间节点,有许多不同的方法,most of them discussed here at Stack Overflow。如果您无法解决,请打开一个新问题,因为主题不同。以下是访问这些元素的 3 种方法:

    $ArrayOfItem->Item->children("http://systinet.com/wsdl/com/osm/webservices/service/");
    $ArrayOfItem->Item->children('q1', true);
    $ArrayOfItem->Item->xpath('//q1:Attribute');
    

    【讨论】:

    • sXML() 向我展示了 xml 文件,但是现在如何选择单个节点? echo $xml->ArrayOfItem->Item->attributes->Attribute[0]->value;不显示任何内容
    【解决方案2】:

    simpleXML 解析器应该提供有意义的错误消息,您可以获取和输出。查看documentation on libxml_get_errors()中的示例代码。

    【讨论】:

    • @sschnake @pinaki 指出了至少一个严重错误,不是吗? (缺少的结束标签)
    • 是的,XML 无效(我已经修复了原始帖子)并引发了至少 3 个 PHP 警告。检查您的 error_reporting 级别。尝试在脚本开头添加error_reporting(-1);,否则你会错过很多错误。
    【解决方案3】:

    两件事:

    • 您缺少 q1:attributes 的结束标记。
    • SimpleXML 无法处理&lt;q1:Attributes&gt; 类型标签。我把它改成了&lt;q1&gt;,它一直工作到那个标签。

    我认为您需要SimpleXML 解析器

    【讨论】:

    • 我已经修复了 XML。至于其他,SimpleXML 支持命名空间,这里没问题。
    猜你喜欢
    • 2021-12-12
    • 2010-12-08
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    相关资源
    最近更新 更多