在命名空间 XML 中循环
looping in namespaced XML
我有这个 XML :
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:ReadPNRResponseBody xmlns="http://trippro.com/webservices/common/v2" xmlns:ns2="http://trippro.com/webservices/readpnr/v2">
<ns2:ReadPNRResponse>
<ns2:PaxDetail>
<PaxRef>1</PaxRef>
<PaxType>ADT</PaxType>
<FirstName>JOHN</FirstName>
<MiddleName>ADAM</MiddleName>
<LastName>DOE</LastName>
<Gender>M</Gender>
<DateOfBirth>08/15/1983</DateOfBirth>
<PassportNumber>9DUSIJH232</PassportNumber>
<Nationality>IN</Nationality>
<CountryOfIssue>US</CountryOfIssue>
</ns2:PaxDetail>
<ns2:PaxDetail>
<PaxRef>1</PaxRef>
<PaxType>ADT</PaxType>
<FirstName>JEAN</FirstName>
<MiddleName></MiddleName>
<LastName>SMITH</LastName>
<Gender>M</Gender>
<DateOfBirth>08/15/1983</DateOfBirth>
<PassportNumber>9DUSIJH232</PassportNumber>
<Nationality>CA</Nationality>
<CountryOfIssue>CA</CountryOfIssue>
</ns2:PaxDetail>
</ns2:ReadPNRResponse>
</ns2:ReadPNRResponseBody>
</soap:Body>
</soap:Envelope>
我想在 PaxDetail 元素上循环。
我试过了,但看起来它只采用了第一个元素。我怎样才能循环 PaxDetail
$response = $simpleXmlElement->children('soap', true)->Body->children('ns2', true);
foreach($response->ReadPNRResponseBody->ReadPNRResponse->PaxDetail->children() as $PaxDetail){
};
您正在引用 foreach()
中的最低级别数据(<PaxRef>
等),这应该在循环内完成,以便循环只遍历 <ns2:PaxDetail>
元素...
foreach($response->ReadPNRResponseBody->ReadPNRResponse->PaxDetail as $PaxDetail){
echo $PaxDetail->children()->FirstName.PHP_EOL;
};
您需要进入 PaxDetail 的父级(又名 ns2:ReadPNRResponse),然后开始遍历其子级:
$response = $simpleXmlElement->children('soap', true)->Body->children('ns2', true)->ReadPNRResponseBody->ReadPNRResponse;
foreach($response->children('ns2', true) as $PaxDetail){
foreach($PaxDetail->children() as $item) {
var_dump($item); //will show all items
}
}
我有这个 XML :
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:ReadPNRResponseBody xmlns="http://trippro.com/webservices/common/v2" xmlns:ns2="http://trippro.com/webservices/readpnr/v2">
<ns2:ReadPNRResponse>
<ns2:PaxDetail>
<PaxRef>1</PaxRef>
<PaxType>ADT</PaxType>
<FirstName>JOHN</FirstName>
<MiddleName>ADAM</MiddleName>
<LastName>DOE</LastName>
<Gender>M</Gender>
<DateOfBirth>08/15/1983</DateOfBirth>
<PassportNumber>9DUSIJH232</PassportNumber>
<Nationality>IN</Nationality>
<CountryOfIssue>US</CountryOfIssue>
</ns2:PaxDetail>
<ns2:PaxDetail>
<PaxRef>1</PaxRef>
<PaxType>ADT</PaxType>
<FirstName>JEAN</FirstName>
<MiddleName></MiddleName>
<LastName>SMITH</LastName>
<Gender>M</Gender>
<DateOfBirth>08/15/1983</DateOfBirth>
<PassportNumber>9DUSIJH232</PassportNumber>
<Nationality>CA</Nationality>
<CountryOfIssue>CA</CountryOfIssue>
</ns2:PaxDetail>
</ns2:ReadPNRResponse>
</ns2:ReadPNRResponseBody>
</soap:Body>
</soap:Envelope>
我想在 PaxDetail 元素上循环。 我试过了,但看起来它只采用了第一个元素。我怎样才能循环 PaxDetail
$response = $simpleXmlElement->children('soap', true)->Body->children('ns2', true);
foreach($response->ReadPNRResponseBody->ReadPNRResponse->PaxDetail->children() as $PaxDetail){
};
您正在引用 foreach()
中的最低级别数据(<PaxRef>
等),这应该在循环内完成,以便循环只遍历 <ns2:PaxDetail>
元素...
foreach($response->ReadPNRResponseBody->ReadPNRResponse->PaxDetail as $PaxDetail){
echo $PaxDetail->children()->FirstName.PHP_EOL;
};
您需要进入 PaxDetail 的父级(又名 ns2:ReadPNRResponse),然后开始遍历其子级:
$response = $simpleXmlElement->children('soap', true)->Body->children('ns2', true)->ReadPNRResponseBody->ReadPNRResponse;
foreach($response->children('ns2', true) as $PaxDetail){
foreach($PaxDetail->children() as $item) {
var_dump($item); //will show all items
}
}