0

SimpleXMLに精通しており、クライアントからSOAP応答を受信して​​います。SimpleXMLで読んで、できるだけ多くの例を読んでみましたが、うまくいきません。次のコードでDESCRIPTIONノードを読み取るPHPの行を教えてください。

<?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>
    <GetPoliciesResponse xmlns="http://www.abraxas-uk.com/Abraxas/InsuranceWebsite/InsWebService/">
      <GetPoliciesResult>
        <Policies xmlns="">
          <Policy>
            <Description>Off-Pad Warranty</Description>
            <Plan />
          </Policy>
        </Policies>
      </GetPoliciesResult>
    </GetPoliciesResponse>
  </soap:Body>
</soap:Envelope>

髪を抜いています!

4

1 に答える 1

0

複数のXML名前空間を含むドキュメントでSimpleXMLを使用するIIRCは混乱します。

DOMを使用できます(つまり、XPathなしで):

<?php

$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>
    <GetPoliciesResponse xmlns="http://www.abraxas-uk.com/Abraxas/InsuranceWebsite/InsWebService/">
      <GetPoliciesResult>
        <Policies xmlns="">
          <Policy>
            <Description>Off-Pad Warranty</Description>
            <Plan />
          </Policy>
        </Policies>
      </GetPoliciesResult>
    </GetPoliciesResponse>
  </soap:Body>
</soap:Envelope>';

$doc = DOMDocument::loadXml($xml);

$desc = $doc->getElementsByTagName('Description')->item(0)->textContent;

echo $desc;

より複雑なケースでは、代わりにXPathを使用する必要がある場合がありますDOMNode::getElementsByTagName()

http://www.php.net/manual/en/class.domxpath.php

便宜上、2つの世界(DOM / Simplexml)を切り替えることができます。

http://www.php.net/manual/en/function.simplexml-import-dom.php

http://www.php.net/manual/en/function.dom-import-simplexml.php

于 2012-07-04T15:05:27.953 に答える