【问题标题】:Why wont simpleXML convert this xml to something usable?为什么 simpleXML 不将此 xml 转换为可用的东西?
【发布时间】:2011-07-27 00:42:54
【问题描述】:

我正在尝试使用 PHP 中的 Web 服务。我无法控制网络服务的输出。它给了我看起来不错的 XML,但 simpleXML 只是返回一个空对象给我。这是从 web 服务返回的 XML

<?xml version="1.0" encoding="utf-8"?>
<DataSet xmlns="http://Service">
  <xs:schema id="WorkOrders" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xs:element name="WorkOrders" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="WorkOrder">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="WorkOrder_x0023_" type="xs:string" minOccurs="0" />
                <xs:element name="DateEntered" type="xs:string" minOccurs="0" />
                <xs:element name="DateCompleted" type="xs:string" minOccurs="0" />
                <xs:element name="DateChanged" type="xs:string" minOccurs="0" />
                <xs:element name="Status" type="xs:string" minOccurs="0" />
                <xs:element name="Type" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>
  <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
    <WorkOrders xmlns="">
      <WorkOrder diffgr:id="WorkOrder1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
        <WorkOrder_x0023_>7164724</WorkOrder_x0023_>
        <DateEntered>07/19/11</DateEntered>
        <DateCompleted>07/21/11</DateCompleted>
        <DateChanged>07/21/11</DateChanged>
        <Status>CP</Status>
        <Type>IN</Type>
      </WorkOrder>
    </WorkOrders>
  </diffgr:diffgram>
</DataSet>

这是通过我的脚本中的一个简单的$xml = file_get_contents($url); 调用获得的。 simplexml_load_string($xml); 返回一个空对象。

(object) SimpleXMLElement Object
(
)

我知道我在这里遗漏了一些东西,但我就是无法找到它。有什么想法吗?

【问题讨论】:

    标签: php simplexml


    【解决方案1】:

    您需要在访问命名空间子项和 diffgram(以及 WorkOrder 的 id)等属性时指定命名空间。试试:

    var_dump($xml->children('urn:schemas-microsoft-com:xml-diffgram-v1')->children());
    

    (那些子元素回到默认命名空间)

    参考:http://blog.sherifmansour.com/?p=302

    【讨论】:

    • 谢谢。我真的为此摸不着头脑。
    猜你喜欢
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2022-01-21
    • 2017-02-16
    • 1970-01-01
    • 2023-03-08
    • 2021-03-30
    • 2021-08-29
    相关资源
    最近更新 更多