Во-первых, вы можете упростить это, используя or
. Это позволяет избежать повторения //*
несколько раз, хотя вы можете указать @id=
часть несколько раз:
//*[@id='apple' or @id='orange' or @id='banana']
Более элегантное решение - проверить список допустимых идентификаторов. Теперь, если вы используете XPath 1.x, вам нужно будет немного поработать с гимнастикой, чтобы получить contains () для выполнения ставок. В частности, обратите внимание, что у меня есть пробелы на обоих концах первой строки, а затем объедините пробелы с каждым концом @id
перед поиском совпадения. Это необходимо для предотвращения совпадения @id
из "range"
, например.
//*[contains(' apple orange banana ', concat(' ', @id, ' '))]
Если вы используете XPath 2.0, то путь вперед упрощается благодаря добавлению последовательностей в язык:
//*[exists(index-of(('apple', 'orange', 'banana'), @id))]