XPath with optional tbody element

Posted by Phrogz on Stack Overflow See other posts from Stack Overflow or by Phrogz
Published on 2011-01-06T03:30:08Z Indexed on 2011/01/06 3:53 UTC
Read the original article Hit count: 396

Filed under:
|

As in this Stack Overflow answer imagine that you need to select a particular table and then all the rows of it. Due to the permissiveness of HTML, all three of the following are legal markup:

<table id="foo"><tr>...</tr></table>
<table id="foo"><tbody><tr>...</tr></tbody></table>
<table id="foo"><tr>...</tr><tbody><tr>...</tr></tbody></table>

You are worried about tables nested in tables, and so don't want to use an XPath like
table[@id="foo"]//tr.

If you could specify your desired XPath as a regex, it might look something like:
table[@id="foo"](/tbody)?/tr

In general, how can you specify an XPath expression that allows an optional element in the hierarchy of a selector?

To be clear, I'm not trying to solve a real-world problem or select a specific element of a specific document. I'm asking for techniques to solve a class of problems.

© Stack Overflow or respective owner

Related posts about html

Related posts about xpath