php从XML文件中获取数据

时间:2014-02-17 20:54:23

标签: php xml

我正在进行SOAP调用并获取以XML格式返回的数据。返回的XML有一个标记,我不知道如何处理。我只需要所有<web_get_debiteuren>

我想过使用php SimpleXMLElement(http://www.php.net/manual/en/simplexml.examples-basic.php)。但我无法做到这样的事情:

$xml = new SimpleXMLElement($result);
echo $xml->soap;

我如何能够浏览XML文件的所有结果<web_get_debiteuren>部分?

请参阅以下XML:

<?xml version="1.0" encoding="windows-1250"?>
<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>
    <getdatawithoptionsresponse xmlns="urn:Afas.Profit.Services">
      <getdatawithoptionsresult>
        <AfasGetConnector>
          <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="AfasGetConnector">
              <xs:complexType>
                <xs:choice maxOccurs="unbounded">
                  <xs:element name="web_get_debiteuren">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="Nummer_debiteur" type="xs:string" minOccurs="0"/>
                        <xs:element name="Naam_debiteur" type="xs:string" minOccurs="0"/>
                        <xs:element name="E-mail_werk" type="xs:string" minOccurs="0"/>
                        <xs:element name="Voornaam" type="xs:string" minOccurs="0"/>
                        <xs:element name="Achternaam" type="xs:string" minOccurs="0"/>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:choice>
              </xs:complexType>
            </xs:element>
          </xs:schema>
          <web_get_debiteuren>
            <Nummer_debiteur>10000</Nummer_debiteur>
            <Naam_debiteur>Test</Naam_debiteur>
            <Voornaam>Hans</Voornaam>
            <Achternaam>Klok</Achternaam>
          </web_get_debiteuren>
          <web_get_debiteuren>
            <Nummer_debiteur>11000</Nummer_debiteur>
            <Naam_debiteur>Sven</Naam_debiteur>
            <E-mail_werk>e@mail.com</E-mail_werk>
            <Voornaam>Sven</Voornaam>
            <Achternaam>Kramer</Achternaam>
          </web_get_debiteuren>
          <web_get_debiteuren>
            <Nummer_debiteur>11001</Nummer_debiteur>
            <Naam_debiteur>Ireen</Naam_debiteur>
            <E-mail_werk>i@reen.nl</E-mail_werk>
            <Voornaam>Ireen</Voornaam>
            <Achternaam>Wust</Achternaam>
          </web_get_debiteuren>
        </AfasGetConnector>
      </getdatawithoptionsresult>
    </getdatawithoptionsresponse>
  </soap:body>
</soap:envelope>

2 个答案:

答案 0 :(得分:0)

您可以使用xpath。可能出现问题的样品:

Using xpath on a PHP SimpleXML object, SOAP + namespaces (not working..) parse an XML with SimpleXML which has multiple namespaces

但我认为,如果可能的话,你应该使用SoapClient ..

答案 1 :(得分:0)

感谢Nostalgie使用xpath的提示,我得到了它的工作。请参阅以下代码:

$response = simplexml_load_string( $result ,NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/" );

$response->registerXPathNamespace("site", "urn:Afas.Profit.Services");
$_res = $response->xpath('//site:AfasGetConnector');
#$_res = $_res->AfasGetConnector;

foreach($_res[0]->web_get_debiteuren AS $deb){
  echo "Number: ".$deb->Nummer_debiteur."<br>";
}

这将输出:

Number: 10000
Number: 11000
Number: 11001
Number: 11002
Number: 11003
Number: 11004

感谢名单!