XPath: Can I select a node whose next (or previous) sibling matches some criteria?

html html-agility-pack xpath

Question

I am reformatting an HTML document using the Agility Pack, and I've run into a limitation of my understanding of XPath.

In the document I'm working with, the following is a common construct:

1282

Which is built like this:

128<img src="" style="display: none;" alt="^(" /><sup>2</sup><img src="" style="display: none;" alt=")" />

So, when you select that and copy it to the clipboard it turns into:

128^(2)

Now, I would like to use XPath to remove these img tags.

Here is what I have so far:

//img[@alt='^('  ???/sup]

How do I select an element based on existence of an immediate sibling?

Accepted Answer

apparently it is something like this:

//img[@alt='^(' and following-sibling::*[1][self::sup]]

That is (and, I'm guessing, here):

//img

An img (anywhere)...

[@alt='^(' and  ...  ]

... whose alt attribute is '^(' and ...

following-sibling::*[1]

... whose first following sibling ...

[self::sup]

... can call itself a sup.


Popular Answer

Off the top of my head, make it a compound condition. Something like:

//img[@alt='^('  ???/sup AND preceding-sibling::*[1] AND following-sibling::*[1]]



Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Is this KB legal? Yes, learn why