Dear All,

Can you tell what the XPath expression that:
"selects all C elements that come after A and have a D parent" is.

That is, there might be a schema, which declares the unwanted instances of C
as integers, while
the other C declared has some anonymous complexType.


<?xml version="1.0" encoding="UTF-8"?>
<A>
        <B>
                <C/>                                            <!-- DO NOT select 
this -->
                <D>
                        <!-- recursion is introduced here -->
                        <C>                                     <!-- select this -->
                                <B>
                                        <C/>                    <!-- DO NOT select 
this -->
                                        <D>
                                                <C/>            <!-- select this -->
                                        </D>
                                </B>
                        </C>
                </D>
        </B>
</A>


/A//D/C (/A/descendant::D/C) would suffice, or, better, /A//B/D/C
(/A/descendant::B/D/C). But this would not rule out the possibility of the
B/D/C pattern appearing somewhere after A in another context. I cannot find
any XPath feature that would handle recursion.


<?xml version="1.0" encoding="UTF-8"?>
<A>
        <B>
                <F>
                        <B>
                                <D>
                                        <C/>                    <!-- this would be 
selected incorrectly -->
                                </D>
                        </B>
                </F>
                <D>
                        <!-- recursion is introduced here -->
                        <C>                                     <!-- select this -->
                                <B>
                                        <C/>                    <!-- DO NOT select 
this -->
                                        <D>
                                                <C/>            <!-- select this -->
                                        </D>
                                </B>
                        </C>
                </D>
        </B>
</A>

Using /A/B/D/C | /A/B/D/C//B/D/C would overcome this, but you can see how I
could create another problematic example...
How does one find one's way around this, using a generic XPath approach?
I am not saying this is good XML design. To the contrary! ... it is legal,
nonetheless ...any ideas?

regards,

nikolas/

Reply via email to