Я получаю следующий ответ от веб-службы. Мне нужно получить значения внутри dtAccData (FULL_NAME
, GLOBAL_ID
)
<?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">
<strGetCustomerValidationResponse xmlns="http://tempuri.org/">
<strGetCustomerValidationResult>21^Please complete your pending form^150675^1</strGetCustomerValidationResult>
<dtAccData>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table">
<xs:complexType>
<xs:sequence>
<xs:element name="FULL_NAME" type="xs:string" minOccurs="0" />
<xs:element name="GLOBAL_ID" 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">
<NewDataSet xmlns="">
<Table diffgr:id="Table1" msdata:rowOrder="0">
<FULL_NAME>TEST39</FULL_NAME>
<GLOBAL_ID>37405-9879863-7</GLOBAL_ID>
</Table>
</NewDataSet>
</diffgr:diffgram>
</dtAccData>
</strGetCustomerValidationResponse>
</soap:Envelope>
Если я загружаюсь в простой объект XML и дамп, я не вижу никаких значений внутри dtAccData. Я только ниже.
$xml = new SimpleXMLElement($xml_tring);
var_dump($xml);
я получил
GetCustomerValidationResponse"]=> object(SimpleXMLElement)#2 (2) { ["strGetCustomerValidationResult"]=> string(45) "21^Please complete your pending form^630160^1" ["dtAccData"]=> object(SimpleXMLElement)#3 (0) { } } }
Что я должен делать.
Здесь мы используем DOMDocument
для извлечения textContent
внутри элемента.
Попробуйте этот фрагмент кода здесь
<?php
ini_set('display_errors', 1);
$string='<?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">
<strGetCustomerValidationResponse xmlns="http://tempuri.org/">
<strGetCustomerValidationResult>21^Please complete your pending form^150675^1</strGetCustomerValidationResult>
<dtAccData>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table">
<xs:complexType>
<xs:sequence>
<xs:element name="FULL_NAME" type="xs:string" minOccurs="0" />
<xs:element name="GLOBAL_ID" 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">
<NewDataSet xmlns="">
<Table diffgr:id="Table1" msdata:rowOrder="0">
<FULL_NAME>TEST39</FULL_NAME>
<GLOBAL_ID>37405-9879863-7</GLOBAL_ID>
</Table>
</NewDataSet>
</diffgr:diffgram>
</dtAccData>
</strGetCustomerValidationResponse>
</soap:Envelope>';
$domDocument= new DOMDocument();
$domDocument->loadXML($string);
echo $FULL_NAME=$domDocument->getElementsByTagName("FULL_NAME")->item(0)->textContent;
echo PHP_EOL;
echo $GLOBAL_ID=$domDocument->getElementsByTagName("GLOBAL_ID")->item(0)->textContent;
Выход:
TEST39 37405-9879863-7
Если ваш ответ XML
не содержит. из этих тегов, из которых вы хотите извлечь информацию. Вы можете использовать этот код для получения multiple occurences
Попробуйте этот фрагмент кода здесь for multiple occurences
<?php
$domDocument= new DOMDocument();
$domDocument->loadXML($string);
$result=array();
foreach($domDocument->getElementsByTagName("FULL_NAME") as $fullnameElement)
{
$result["FULL_NAME"][]=$fullnameElement->textContent;
}
foreach($domDocument->getElementsByTagName("GLOBAL_ID") as $fullnameElement)
{
$result["GLOBAL_ID"][]=$fullnameElement->textContent;
}
print_r($result);
Выход:
Array
(
[FULL_NAME] => Array
(
[0] => TEST39
)
[GLOBAL_ID] => Array
(
[0] => 37405-9879863-7
)
)