Хорошо, во-первых, «правильный xml» можно интерпретировать несколькими способами. Если вы имеете в виду «не правильно сформированные» (пропущенные угловые скобки, перекрывающиеся элементы и т. Д.), Ни одна версия xpath вряд ли с этим справится. Тебе было бы лучше с какими-то регулярными выражениями. Если ваш XML не правильно сформирован, я надеюсь, что у вас есть хоть какой-то ключ к пониманию того, как он не будет правильно сформирован, иначе у вас нет надежды получить что-либо с ним.
Если вы на самом деле имеете в виду «неверный», что просто означает, что он не проверяется на соответствие схеме или DTD, тогда вы можете использовать предикаты, которые сравниваются с функцией «local-name ()». Например, если вы хотите найти элемент "/ foo / bar", игнорируя схемы, тогда ваш xpath будет выглядеть так:
/*[local-name()='foo']/*[local-name()='bar']