Мне кажется, у меня есть решение, которое не требует работы с пространствами имен.
Вот тот, который выбирает все соответствующие div :
//div[@id[starts-with(.,"post_message")]]
Но вы сказали, что хотели только «первый» (я полагаю, вы имеете в виду первый «удар» на всей странице?). Вот небольшая модификация, которая выбирает только первый соответствующий результат :
(//div[@id[starts-with(.,"post_message")]])[1]
Они используют точку для представления значения идентификатора в функции starts-with()
. Возможно, вам придется избегать специальных символов на вашем языке.
У меня отлично работает в PowerShell:
# Load a sample xml document
$xml = [xml]'<root><div id="post_message_somenumber"/><div id="not_post_message"/><div id="post_message_somenumber2"/></root>'
# Run the xpath selection of all matching div's
$xml.selectnodes('//div[@id[starts-with(.,"post_message")]]')
Результат:
id
--
post_message_somenumber
post_message_somenumber2
Или только для первого матча:
# Run the xpath selection of the first matching div
$xml.selectnodes('(//div[@id[starts-with(.,"post_message")]])[1]')
Результат:
id
--
post_message_somenumber