2016-12-12 3 views
0

SimpleXML을 사용하여 구문 분석하려는 외부 엔터티에서 생성 한 XML 파일이 있습니다. 제 문제는 클라이언트가 제공 한 매핑에서 원하는 정보를 얻는 데 필요한 조건이 있다는 것입니다.SimpleXML : 구문 분석 규칙에서 조건을 가진 노드 값을 얻는 방법?

는 exemple를 들어, 클라이언트 코드에 대한 매핑은 다음과 같이이다 : E1ADRM1\PARTNER_Q=OSO\E1ADRE1\EXTEND_D 느릅 나무는 클라이언트 코드가 EXTEND_D 태그의 값이 느릅 나무가 많은 PARTNER_Q 태그 중 하나에 중첩되어 있음을 의미합니다. OSO 값을 가진 것.

오늘 SimpleXML을 탐색하기 시작 했으므로이 정보를 얻는 방법을 모릅니다.

내가 지금까지 읽은 내용은 노드의 정보를 얻는 것이 매우 간단하며 속성에 액세스하는 것은 간단합니다. 하나의 PARTNER_Q와 조건이없는 경우 내 $clientCode$xml->E1ADRM1->PARTNER_Q->E1ADRE1->EXTEND_D (맞습니까?)

PARTNER_Q=OSO 상태를 염두에두고 어떤 정보를 얻을 수 있습니까?

미리 감사드립니다.

답변

0

나중에 참조 할 수 있도록이 코드를 어떻게 해결했는지 알려 드리겠습니다. 내가 찾은 well written answer에이 코드를 기반으로했습니다.

$root = $xml->IDOC; 
$shippingPoints = array(); 
// Go through the list of OTs  
foreach($root->E1EDL20 as $ot) { 

    // Instanciate empty OT 
    $otInfo = emptyOt(); 
    $otInfo["refOt"] = trim($ot->VBELN); 

    // Go through partner to get the wanted items 
    foreach ($ot->E1ADRM1 as $partner) { 
      switch ($partner->PARTNER_Q) { 
        case "OSO": 
          $otInfo["codeLoader1"] = trim($partner->E1ADRE1->EXTEND_D); 

          break; 
        case "OSP": 
          $otInfo["refShip"] = trim($partner->PARTNER_ID); 
          // get the shipping info if not already fetched 
          if(!isset($shippingPoints[$otInfo["refShip"]])) { 
            $shippingPoints[$otInfo["refShip"]] = Whouses::getWhouseAddressByCode($otInfo["refShip"]); 
          } 
          // assign values 
          $otInfo["brandNameShip"] = $shippingPoints[$otInfo["refShip"]]["name"]; 
          $otInfo["addrShip1"] = $shippingPoints[$otInfo["refShip"]]["address"]; 
          $otInfo["cityShip"] = $shippingPoints[$otInfo["refShip"]]["city"]; 
          $otInfo["zipShip"] = $shippingPoints[$otInfo["refShip"]]["zipcode"]; 
          $otInfo["countryShip"] = $shippingPoints[$otInfo["refShip"]]["country"]; 

          break; 
        case "WE": 
          $otInfo["refDeliv"] = trim($partner->PARTNER_ID); 
          $otInfo["addrDeliv1"] = trim($partner->STREET1); 
          $otInfo["cityDeliv"] = trim($partner->CITY1); 
          $otInfo["zipDeliv"] = trim($partner->POSTL_COD1); 
          $otInfo["countryDeliv"] = trim($partner->COUNTRY1); 
        default: 
          // do nothing 
          break; 
      } 
    } 

    // Go through the dates info to get the wanted items 
    foreach ($ot->E1EDT13 as $qualf) { 
      switch ($qualf->QUALF) { 
        case "006": 
          $dtDeliv = trim($qualf->NTANF); 
          $timeDeliv = trim($qualf->NTANZ); 
          $otInfo["initialDtDeliv"] = convertToOtDateFormat($dtDeliv, $timeDeliv); 

          break; 
        case "007": 
          $initialDtShip = trim($qualf->NTANF); 
          $timeInitialDtShip = trim($qualf->NTANZ); 
          $otInfo["initialDtShip"] = convertToOtDateFormat($initialDtShip, $timeInitialDtShip); 

          break; 
        default: 
          // do nothing 
          break; 
      } 
    } 
} 

희망이 있으면 도움이 될 것입니다.