0

I've got this XML Snippet.

<bms:ProcurementPart> <bms:ProcurementRefLineNum>1</bms:ProcurementRefLineNum> <bms:SelectedPart> <bms:BMSObject> <bms:UUID>655482ab-38ee-433f-b310-1f6f227113b9</bms:UUID> <bms:RefUUID>92a8ecf6-8eb6-4d1e-b88d-59b50c3b0cc9</bms:RefUUID> </bms:BMSObject> <bms:UniqueSequenceNum>1</bms:UniqueSequenceNum> <bms:PartNumInfo> <bms:PartNumType>OE</bms:PartNumType> <bms:PartNum>04715SNAA90ZZ</bms:PartNum> </bms:PartNumInfo> <bms:PartNumInfo> <bms:PartNumType>HollanderInterchange</bms:PartNumType> <bms:PartNum>536-01037</bms:PartNum> </bms:PartNumInfo> <bms:PartNumInfo> <bms:PartNumType>HollanderPType</bms:PartNumType> <bms:PartNum>536</bms:PartNum> </bms:PartNumInfo> <bms:PartType>PAN</bms:PartType> <bms:PartDesc>Caliper</bms:PartDesc> <bms:Quantity>1</bms:Quantity> <bms:PriceInfo> <bms:UnitListPrice>50.00</bms:UnitListPrice> <bms:UnitNetPrice>50.00</bms:UnitNetPrice> </bms:PriceInfo> </bms:SelectedPart> <bms:NeedByDateTime>0001-01-01T00:00:00</bms:NeedByDateTime> </bms:ProcurementPart> <bms:ProcurementPart> <bms:ProcurementRefLineNum>2</bms:ProcurementRefLineNum> <bms:SelectedPart> <bms:BMSObject> <bms:UUID>eb510b2d-c8e2-4dd1-a214-a017c22b3104</bms:UUID> <bms:RefUUID>92a8ecf6-8eb6-4d1e-b88d-59b50c3b0cc9</bms:RefUUID> </bms:BMSObject> <bms:UniqueSequenceNum>3</bms:UniqueSequenceNum> <bms:PartNumInfo> <bms:PartNumType>OE</bms:PartNumType> <bms:PartNum>71570SNAA00</bms:PartNum> </bms:PartNumInfo> <bms:PartNumInfo> <bms:PartNumType>HollanderInterchange</bms:PartNumType> <bms:PartNum>536-01036</bms:PartNum> </bms:PartNumInfo> <bms:PartType>PAN</bms:PartType> <bms:PartDesc>Caliper</bms:PartDesc> <bms:Quantity>1</bms:Quantity> <bms:PriceInfo> <bms:UnitListPrice>30.16</bms:UnitListPrice> <bms:UnitNetPrice>30.16</bms:UnitNetPrice> </bms:PriceInfo> </bms:SelectedPart> <bms:NeedByDateTime>0001-01-01T00:00:00</bms:NeedByDateTime> </bms:ProcurementPart> 

It is being iterated using this foreach:

foreach($ProcurementPartNodes as $node) { $uniqueseq++; $linenum = (string)$node->children("bms",true)->ProcurementRefLineNum; $resp["ProcurementRefLineNum"] = $linenum; $selected = $BuildSelectedPart($node, $linenum, $uniqueseq); $resp["SelectedPart"] = $selected; $resp["NeedByDateTime"] = "0001-01-01T00:00:00"; $response_data["ProcurementPart"][] = $resp; } 

And each I'm trying to get each SelectedNode info using these functions:

function BuildSelectedPart($node, $procurementInfoUUID, $linenum, $uniqueseq) { $partdesc = (string)$node[0]->children("bms", true)->PartDesc; $qty = (int)$node[0]->children("bms", true)->Quantity; $unitlistprice = (string)$node[0]->children("bms",true)->PriceInfo->UnitListPrice; $unitnetprice = (string)$node[0]->children("bms",true)->PriceInfo->UnitNetPrice; unset($selected); $selected["BMSObject"] = $BuildSelectedBMS($procurementInfoUUID); $selected["UniqueSequenceNum"] = $uniqueseq; // Iterator for SelectedPart count // Iterate over the PartNumInfo nodes $partnumInfoNodes = $node[0]->xpath("//*[bms:ProcurementRefLineNum = ".$linenum."]/bms:SelectedPart/bms:PartNumInfo"); foreach($partnumInfoNodes as $pnodes) { echo $pnodes->asXML(); foreach($pnodes as $p) { $pnum = array( "PartNumType"=>(string)$p->children("bms",true)->PartNumInfo->PartNumType,// Can be OE, HollanderInterchange, or Stock "PartNum"=>(string)$p->children("bms",true)->PartNumInfo->PartNum // Corresponding number of above type ); // PartNumInfo } $selected["PartNumInfo"][] = $pnum; } $selected["PartType"] = "PAL"; // Usually PAL $selected["PartDesc"] = $partdesc; // Description of Part Requested $selected["Quantity"] = $qty; // Quantity Requested $selected["PriceInfo"] = array( "UnitListPrice"=>$unitlistprice, // Price Requested "UnitNetPrice"=>$unitnetprice // Price Requested ); // PriceInfo return $selected; } // function BuildSelectedPart() function BuildSelectedBMS($procurementInfoUUID) { $UUID = $this->CreateGuid("",true); // creates a new Guid value return array( "UUID"=>$UUID, // Generated UUID "RefUUID"=>$procurementInfoUUID // ProcurementInfo.BMSObject UUID value from above ); // BMSObject } 

This is what is expected, I don't seem to be getting the values from the PartNum and PriceInfo sections correctly. Been slapping my head around this for about an hour now...

[ProcurementPart] => Array( [0] => Array( [ProcurementRefLineNum] => 1 [SelectedPart] => Array( [BMSObject] => Array( [UUID] => 860a7915-8772-23fa-da40-5ca17ada8d50 [RefUUID] => eb9dffc6-de19-e0bf-536e-dc1e4a15344a ) [UniqueSequenceNum] => 1 [PartNumInfo] => Array( [0] => Array( [PartNumType] => OE [PartNum] => 04715SNAA90ZZ ) [1] => Array( [PartNumType] => HollanderInterchange [PartNum] => 536-01037 ) [2] => Array( [PartNumType] => HollanderPType [PartNum] => 536 ) ) [PartType] => PAL [PartDesc] => [Quantity] => 0 [PriceInfo] => Array( [UnitListPrice] => 50.00 [UnitNetPrice] => 50.00 ) ) [NeedByDateTime] => 0001-01-01T00:00:00 ) [1] => Array( [ProcurementRefLineNum] => 2 [SelectedPart] => Array( [BMSObject] => Array( [UUID] => eeb17d4e-b1bb-b92c-b8ac-b311a21389e6 [RefUUID] => eb9dffc6-de19-e0bf-536e-dc1e4a15344a ) [UniqueSequenceNum] => 2 [PartNumInfo] => Array( [0] => Array( [PartNumType] => OE [PartNum] => 71570SNAA00 ) [1] => Array( [PartNumType] => HollanderInterchange [PartNum] => 536-01036 ) ) [PartType] => PAL [PartDesc] => [Quantity] => 0 [PriceInfo] => Array( [UnitListPrice] => 30.16 [UnitNetPrice] => 30.16 ) ) [NeedByDateTime] => 0001-01-01T00:00:00 ) ) 

And this is what I'm getting:

[ProcurementPart] => Array( [0] => Array( [ProcurementRefLineNum] => 1 [SelectedPart] => Array( [BMSObject] => Array( [UUID] => 860a7915-8772-23fa-da40-5ca17ada8d50 [RefUUID] => eb9dffc6-de19-e0bf-536e-dc1e4a15344a ), [UniqueSequenceNum] => 1 [PartNumInfo] => Array( [0] => Array( [PartNumType] => [PartNum] => ), [1] => Array( [PartNumType] => [PartNum] => ), [2] => Array( [PartNumType] => [PartNum] => ) ) [PartType] => PAL [PartDesc] => [Quantity] => 0 [PriceInfo] => Array( [UnitListPrice] => [UnitNetPrice] => ) ) [NeedByDateTime] => 0001-01-01T00:00:00 ) [1] => Array( [ProcurementRefLineNum] => 2 [SelectedPart] => Array( [BMSObject] => Array( [UUID] => eeb17d4e-b1bb-b92c-b8ac-b311a21389e6 [RefUUID] => eb9dffc6-de19-e0bf-536e-dc1e4a15344a ), [UniqueSequenceNum] => 2 [PartNumInfo] => Array( [0] => Array( [PartNumType] => [PartNum] => ), [1] => Array( [PartNumType] => [PartNum] => ) ) [PartType] => PAL [PartDesc] => [Quantity] => 0 [PriceInfo] => Array( [UnitListPrice] => [UnitNetPrice] => ) ) [NeedByDateTime] => 0001-01-01T00:00:00 ) ) 

1 Answer 1

1

For your part number data, change that bit to...

foreach($partnumInfoNodes as $pnodes) { $pnum = array( "PartNumType"=>(string)$pnodes->children("bms",true)->PartNumType,// Can be OE, HollanderInterchange, or Stock "PartNum"=>(string)$pnodes->children("bms",true)->PartNum // Corresponding number of above type ); // PartNumInfo $selected["PartNumInfo"][] = $pnum; } 

You were trying to go another level down and you didn't need to.

I also think that your first set of data needs an extra level <SelectedPart>...

$partdesc = (string)$node[0]->children("bms", true)->SelectedPart->PartDesc; $qty = (int)$node[0]->children("bms", true)->SelectedPart->Quantity; $unitlistprice = (string)$node[0]->children("bms",true)->SelectedPart->PriceInfo->UnitListPrice; $unitnetprice = (string)$node[0]->children("bms",true)->SelectedPart->PriceInfo->UnitNetPrice; 
Sign up to request clarification or add additional context in comments.

2 Comments

Thx, sometimes, it's funny not seeing the forest for the trees.
Sometime I wonder if throwing an error would be a good thing if the data didn't exist.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.