Я хотел бы обратиться к вам за помощью в решении проблемы, связанной с XPath.
Я пытаюсь обобщить несколько путей Xpath, предоставленных пользователем, чтобы получить XPath, который наилучшим образом «соответствовал бы» всем приведенным примерам. Это для системы веб-очистки, которую я создаю.
Например: Если пользователь задает следующие xpaths (каждый указывает на ссылку в разделе «Spotlight» на странице Новостей Google)
Хорошие примеры:
/html/body/div[@id='page']/div/div[@id='main-wrapper']/div[@id='main']/div/div/div[3] /div[1]/table[@id='main-am2-pane']/tbody/tr/td[@id='rt-col']/div[3]/div[@id='s_en_us:ir']/div[2]/div[1]/div[2]/a[@id='MAE4AUgAUABgAmoCdXM']/span
/html/body/div[@id='page']/div/div[@id='main-wrapper']/div[@id='main']/div/div/div[3]/div[1]/table[@id='main-am2-pane']/tbody/tr/td[@id='rt-col']/div[3]/div[@id='s_en_us:ir']/div[2]/div[6]/div[2]/a[@id='MAE4AUgFUABgAmoCdXM']/span
/html/body/div[@id='page']/div/div[@id='main-wrapper']/div[@id='main']/div/div/div[3]/div[1]/table[@id='main-am2-pane']/tbody/tr/td[@id='rt-col']/div[3]/div[@id='s_en_us:ir']/div[2]/div[12]/div[2]/a[@id='MAE4AUgLUABgAmoCdXM']/span
Плохие примеры: (указывает на ссылку в другом разделе)
/html/body/div[@id='page']/div/div[@id='main-wrapper']/div[@id='main']/div/div/div[3]/div[1]/table[@id='main-am2-pane']/tbody/tr/td[@id='lt-col']/div[2]/div[@id='replaceable-section-blended']/div[1]/div[4]/div/h2/a[@id='MAA4AEgFUABgAWoCdXM']/span
Должно быть в состоянии обобщить и создать выражение xpath , которое выберет все ссылки в разделе «Spotlight». (Должно быть в состоянии выкинуть неправильный заданный путь xpath)
Обобщенная XPath
/html/body/div[@id='page']/div/div[@id='main-wrapper']/div[@id='main']/div/div/div[3]/div[1]/table[@id='main-am2-pane']/tbody/tr/td[@id='rt-col']/div[3]/div[@id='s_en_us:ir']/div[2]/div/div[2]/a[@id='MAE4AUgLUABgAmoCdXM']/span
Не могли бы вы дать мне совет, как это сделать. Я думал об использовании стратегии Longest Common Substring, но, тем не менее, это привело бы к чрезмерному обобщению, если был бы приведен плохой пример (например, четвертый приведенный пример). Существуют ли какие-либо библиотеки или программное обеспечение с открытым исходным кодом, которое было сделано в этой области?
Я видел несколько похожих постов ( найти общего предка из группы xpath? и Как найти первого общего предка XPath в Javascript? ) Однако они говорят о самом длинном общем предке .
Я пишу это в Javascript как форму расширения Firefox.
Спасибо за ваше время, и любая помощь будет принята с благодарностью!