Xpath для выбора идентификатора HTML, включая случайное число - PullRequest
1 голос
/ 10 ноября 2010

Привет, как бы я выбрал все ссылки, когда они имеют следующий идентификатор.

<a id="List_ctl01_link3" class="content" href=link1.aspx">
<a id="List_ctl02_link3" class="content" href=link2.aspx">
<a id="List_ctl03_link3" class="content" href=link3.aspx">
<a id="List_ctl04_link3" class="content" href=link4.aspx">

И так далее ...

Обратите внимание, что последняя часть "link3" важна и должна быть включена в Xpath.

Я использую пакет гибкости C # и Html.

Ответы [ 3 ]

5 голосов
/ 10 ноября 2010

Привет, как бы я выбрал все ссылка когда они имеют следующий идентификатор

Используйте это выражение XPath:

//a[@id[starts-with(.,'List_ctl')][substring(.,string-length()-5)='_link3']]

Примечание : в XPath 1.0 нет fn:ends-with(). Вместо этого используйте последний предикат.

3 голосов
/ 11 ноября 2010

Использовать :

//a[@id[starts-with(.,'List_ctl')
      and
        substring(.,string-length()-5)='_link3'
      and
         floor(substring-before(substring_after(.,'List_ctl'),'_'))
        =
         floor(substring-before(substring_after(.,'List_ctl'),'_'))
       ]
   ]

Это выражение XPath выбирает все a элементов в документе, атрибут id которых имеет строковое значение со всемиследующие свойства:

  1. Начинается со строки 'List_ctl'.

  2. Заканчивается строкой '_link3'.

  3. Подстрока, окруженная 'List_ctl' и '_', представляет собой целое число.

2 голосов
/ 10 ноября 2010

Если вы используете xpath 2.0, вы можете попробовать match / match функции и использовать регулярные выражения.Если вы используете xpath 1.0, вероятно, вам придется написать свой собственный анализатор атрибутов (взгляните на xsl: function).AFAIR функция сопоставления доступна только для xpath 2.0.

Возможно, @id [начинается с (., 'List_ct') и заканчивается (., 'Link3')] - еще один способ сделать это.

...