John Dennis wrote:

> On Tue, 2006-11-28 at 16:57 -0800, Yan Seiner wrote:
>
>>Fist off, I'm a total newbie when it comes to libxml.  I've been able to 
>>work my way through some examples, and produce working code, but I'm not 
>>entirely happy with the result, and I would like some advice.
>>
>>I have an XML tree that looks like this:
>>
>><root>
>>    <plc id="1">
>>       <some stuff/>
>>    </plc>
>>    <plc id="2">
>>       <some other stuff/>
>>    </plc>
>></root>
>>
>>I have a relatively small number (< 50) of the plc nodes, but the whole 
>>tree is pretty big.
>>
>>What is the best (or simplest way) to retrieve the information for plc 2?
>>    
>>
>  
>
> xpath is the simplest and most powerful
>
>>Should I pull all of the plc elements using xmlXPathEvalExpression, and 
>>then iterate over them with xmlGetProp looking for an id attribute with 
>>a value of "2"?
>>    
>>
>
> no need to iterate, just create an xpath expression which specifies id=2
>
> off the top of my head the expression would be "/[EMAIL PROTECTED]"2"]"
>
> just google xpath syntax or xpath examples, you'll turn up a ton

OK, thanks a lot for the above!

I'm working with an embedded platform, so it took me a bit to get all of 
the required libxml stuff together and rebuild PHP with libxml support....

Now I have xpath working with PHP.   Yaay!

Ok, now for the PHP + xml question:

I am trying to get the base node of a schedule; I've attached a small 
portion of my XML file below.  What I would like to do is to get the 
root of a schedule, and then iterate with foreach through all of the 
children.  This is the function I came up with and of course it doesn't 
work.  I don't understand how I am supposed to work with the object that 
the xpath_eval[_expression] returns.  I've also tried the child_nodes 
method and that fails as well.

Hopefully there is a PHP expert on the list who can shed some light on this.

Thanks,

--Yan

    function loadSchedule($pivotID, $schedName, $schedNum) {
    $dom = domxml_open_file("/tmp/test.conf");
    $xpath = xpath_new_context($dom);
    // find base node for our schedule
    $pat = '//root/[EMAIL PROTECTED]"' . $pivotID . '"]/'
        . $schedName . '[EMAIL PROTECTED]"' . $schedNum . '"]';
    print $pat;
    $baseNode = xpath_eval($xpath,$pat);
    var_dump($baseNode);
    $lines = xpath_eval_expression($xpath,'/line',$baseNode);
    var_dump($lines);
    print "\nOK\n";
    foreach($lines->nodeset as $line) {
        var_dump($line);
        }
    }

<root>
    <pivot id="1">
        <water id="1">
            <line id="1">
                <bearingTo>120.0</bearingTo>
                <WetDry>1</WetDry>
                <FwdRev>0</FwdRev>
                <event>0</event>
                <speed>10</speed>
            </line>
            <line id="2">
                <bearingTo>180.0</bearingTo>
                <WetDry>1</WetDry>
                <FwdRev>1</FwdRev>
                <event>0</event>
                <speed>45</speed>
            </line>
        </water>
    <pivot>
</root>
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to