cdouglas wrote:
> Hello,
>   I am having an issue trying to remove a data object using xpath and
> unset and its not working a I expect.
> 
> Example:
> <record>
> <tns:logicalPort id="lp24" parentId="mpg5" portId="24">
> <tns:extendedData dataType="name" instance="1">LP 24</
> tns:extendedData>
> <tns:logicalPortLocation>LP 24</tns:logicalPortLocation>
> </tns:logicalPort>
> <tns:logicalPort id="lp25" parentId="mpg6" portId="25">
> <tns:logicalPortLocation>Lp11222</tns:logicalPortLocation>
> </tns:logicalPort>
> </record>
> 
> I want to remove the entire object for <tns:logicalPort id="lp25"
> parentId="mpg6" portId="25"> based on the portId.
> So remove this:
> <tns:logicalPort id="lp24" parentId="mpg5" portId="24">
> <tns:extendedData dataType="name" instance="1">LP 24</
> tns:extendedData>
> <tns:logicalPortLocation>LP 24</tns:logicalPortLocation>
> </tns:logicalPort>
> 
> The XML is loaded in to the object $record
> If I execute unset($record["logicalPort[portId=24]"]) , nothing
> happens.
> But If I execute unset($record["logicalPort[portId=24]"]->parentId) ,
> then the parentID value is removed, so I am not completely off base.
> How can I remove the entire section?
> 

Well, I'm not happy with the answer. It is working as designed, but this 
does imply that the design is somewhat flawed.

The xpath support was only specified to work with instances of 
SDO_DataObject. But $record->logicalPort is not an SDO_DataObject, it is 
an instance of SDO_List.

The problem is apparent if you try to access a list element using an 
xpath. For example
   $do = $record->logicalPort['portId=24'];
results in the oh-so-explanatory message:
   PHP Fatal error:  main(): internal error (747) - invalid dimension 
type 6 in <source> on line <nn>

In other words, you are using a String (type==6) as an index into a 
list, but only Integers are valid.  There's clearly a check missing 
somewhere, because when you do your unset, it just silently fails and 
doesn't present an error message.

I'm not hopeful that Tuscany would want to add the function to access a 
list element using xpath, though I could ask.

In the PHP implementation, we could at least fix both the baffling error 
message and the failure to output an error message when you attempt to 
unset a list element using xpath, though.

As discussed, your best bet for now is to iterate through the list to 
find the index of the element you want to remove. Then unset it using 
the index as a numeric index. HTH


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"phpsoa" group.
To post to this group, send email to phpsoa@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.co.uk/group/phpsoa?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to