XML,xpath空结果

时间:2015-08-08 15:25:17

标签: php xml xpath

我正在修复另一家公司的模块,我无法解释为什么XML中的xPath会给我一个空结果。

这是XML:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:HNS="http://tempuri.org/" xmlns:v1="http://tempuri.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SOAP-ENV:Header>
      <ROClientIDHeader xmlns="urn:DinaPaq" SOAP-ENV:mustUnderstand="0">
         <ID>{A55CF2CD-C7B8-439C-AA9E-C7970C1E8945}</ID>
      </ROClientIDHeader>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body xmlns:ro="http://tempuri.org/">
      <v1:WebServService___GrabaEnvio4Response>
         <v1:strAlbaranOut>9998882267</v1:strAlbaranOut>
         <v1:dPesoVolOriOut>0</v1:dPesoVolOriOut>
         <v1:dPesoVolpesOut>1</v1:dPesoVolpesOut>
         <v1:dAltoVolpesOut>0</v1:dAltoVolpesOut>
         <v1:dAnchoVolpesOut>0</v1:dAnchoVolpesOut>
         <v1:dLargoVolpesOut>0</v1:dLargoVolpesOut>
         <v1:dPesoVolVolpesOut>0</v1:dPesoVolVolpesOut>
         <v1:dtFecEntrOut>2015-08-11T00:00:00</v1:dtFecEntrOut>
         <v1:strTipoEnvOut>N</v1:strTipoEnvOut>
         <v1:dtFecHoraAltaOut>2015-08-08T16:41:29</v1:dtFecHoraAltaOut>
         <v1:dKmsManOut>0</v1:dKmsManOut>
         <v1:boTecleDesOut>false</v1:boTecleDesOut>
         <v1:strCodAgeDesOut>029006</v1:strCodAgeDesOut>
         <v1:strCodProDesOut />
         <v1:dPorteDebOut>0</v1:dPorteDebOut>
         <v1:strCodRepOut />
         <v1:strGuidOut>{99873302-6499-44B2-9F72-C64AC3430755}</v1:strGuidOut>
         <v1:strCodSalRutaOut>1</v1:strCodSalRutaOut>
      </v1:WebServService___GrabaEnvio4Response>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

以下是代码:

$xml = simplexml_load_string($postResult, NULL, NULL, "http://www.w3.org/2003/05/soap-envelope");
$xml->registerXPathNamespace("abc","http://tempuri.org/");

foreach ($xml->xpath('//abc:strAlbaranOut') as $item)
{
    $tipsa_num_albaran=$item;
}
foreach ($xml->xpath('//abc:strGuidOut') as $item)
{
    $tipsa_num_seguimiento=$item;
}

我所看到的是$ tipsa_num_albaran具有正确的值,但$ tipsa_num_seguimiento为空。这两个值都在XML的相同深度和相同分支中,因此我无法理解为什么我的第二个值为空。

由于

1 个答案:

答案 0 :(得分:1)

一种可能的解释是您如何使用变量:$tipsa_num_albaran$tipsa_num_seguimiento。作为SimpleXMLElement s,when casted to a string,这些对象将:

  

返回直接在此元素中的文本内容。不返回此元素的子元素内的文本内容。

我假设这些是您正在寻找的值(而不是对象本身),所以请尝试这样做:

foreach ($xml->xpath('//abc:strAlbaranOut') as $item)
{
    $tipsa_num_albaran = (string) $item;
}
foreach ($xml->xpath('//abc:strGuidOut') as $item)
{
    $tipsa_num_seguimiento = (string) $item;
}