为什么我不能用SimpleXML解析这个SOAP响应?

时间:2012-02-28 11:21:33

标签: xml soap simplexml

我一直在寻找这个问题的解决方案好几个小时但似乎什么都没有用,我读过http://www.sitepoint.com/simplexml-and-namespaces/但它似乎对我不起作用。

这是我要解析的xml:

<?xml version="1.0" encoding="utf-8"?>
 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <FlokkurResponse xmlns="http://www2.ksi.is/vefthjonustur/mot/">
      <FlokkurSvar>
        <ArrayFlokkur>
          <Flokkur>
            <FlokkurHeiti>1. flokkur</FlokkurHeiti>
            <FlokkurNumer>113</FlokkurNumer>
          </Flokkur>
          <Flokkur>
            <FlokkurHeiti>2. flokkur</FlokkurHeiti>
            <FlokkurNumer>109</FlokkurNumer>
          </Flokkur>
          <Flokkur>
            <FlokkurHeiti>3. flokkur</FlokkurHeiti>
            <FlokkurNumer>124</FlokkurNumer>
          </Flokkur>
        </ArrayFlokkur>
        <VillaNumer>0</VillaNumer>
      </FlokkurSvar>
    </FlokkurResponse>
  </soap:Body>
</soap:Envelope>

我想要做的是获取每个FlokkurHeiti的价值所以我认为我可以这样做:

foreach ($xml->Flokkur as $x) {
    echo $x->FlokkurHeiti.'<br/>';
}

正如你所看到的,FLokkur和FlokkurHeiti都没有任何命名空间或属性,但我没有得到任何输出。

我也试过

$t = $xml->children("http://schemas.xmlsoap.org/soap/envelope/")->Body->FlokkurResponse->children("http://www2.ksi.is/vefthjonustur/mot/")->FlokkurSvar->ArrayFlokkur->Flokkur;
foreach ($t as $x) {
    echo $x->FlokkurHeiti.'<br/>';
}

但是获取Node不再存在警告

有人可以帮忙,谢谢

1 个答案:

答案 0 :(得分:0)

  

正如您所看到的,FLokkur和FlokkurHeiti都没有任何名称空间

实际上,他们拥有命名空间:xmlns="http://www2.ksi.is/vefthjonustur/mot/"

也许您可以查看:http://www.w3.org/TR/REC-xml-names/