Важно отметить, что
..element.(list.key.@attr == "val")
Может произойти сбой, если все узлы key не имеют @attr.
Самый безопасный (хотя по моему опыту, не на 100% успешный) метод для извлечения вашего списка узлов был бы.
..element.(list.key.attribute("attr") == "val")
Однако у меня были проблемы с e4x и условными выражениями (реализация AS3, Mozilla кажется лучше), но, похоже, дело до источника xml.