Нахождение узла (или близкий к нему) с использованием XPath в не хорошо сформированной HTML

голоса
3

Я использую XPath для поиска узла (или что-то близкое к этому) в качестве шаблона, который имеет не-хорошо сформированную HTML около 10 уровней в глубину. (Нет, я не писал этот HTML ... но я была поставлена ​​задача вырыть через него.)

Я, кажется, чтобы быть в состоянии извлечь XPath к элементу в вопросе использования XPartner дополнения для Firefox; Однако это только дает мне место в живом месте, а не в шаблоне я был дан. (Шаблон с нестандартным языка сценариев на стороне сервера, читать язык построен в доме)

Существуют ли какие-либо инструменты XPath вы знаете, что особенно хорошо выкарабкаться, не хорошо сформированной HTML.

Задан 09/12/2008 в 22:39
источник пользователем
На других языках...                            


2 ответов

голоса
4

XPath выражение не может быть оценены agaist не-wellformed документа XML , который точно описан случай.

Можно сделать это в двух сцепленных шагов, первый из которых является преобразование HTML в wellformed XML, а затем второй - применить выражение XPath.

Таким образом, этот вопрос может быть более точно сформулировать «Как конвертировать HTML в XML, так что XPath выражение может быть оценено против него».

Вот два хороших инструментов:

  1. TagSoup , с открытым исходным кодом программы , является Java и SAX - инструментоснове, разработанный Джоном Коуэн . Это SAX-совместимый синтаксический анализатор написан на Javaчто вместо разбора хорошо сформированную или действительный XML, HTML разбираеткак это встречается в дикой природе: бедные, противный и бессмысленны, хотядовольно часто далеки от короткой. TagSoup предназначен для людейкоторые должны обработать этот материалиспользуя некое подобие рациональной разработки приложений. Обеспечивая интерфейс SAX, она позволяет стандартных инструментов XMLкоторые должны применяться даже худший HTML. TagSoup также включаетсебя процессор командной строкикоторая считывает HTMLфайлы и могут генерировать либо чистый HTML или хорошо сформированный XMLкоторый является близким приближением к XHTML. Taggle коммерческий порт C ++ из TagSoup.

  2. SgmlReader это инструментразработанный Microsoft, Крис Ловетт . SgmlReader является XmlReader API над любым документом SGML (включая встроенную поддержку для HTML). Утилита командной строки такжеусловиикоторая выводит хорошо сформированный результат XML. Загрузите архиввключая автономный исполняемый файл и полный исходный код: SgmlReader.zip

  3. Чисто XSLT 2.0 Парсер HTML написанный Дэвидом Карлайла . Чтение его код будет отличным упражнением для обучения каждого из нас.

Из описания:

«D: htmlparse (строка) d: htmlparse (строка, пространство имен, HTML-режим)

Форма один аргумент эквивалентен) D: htmlparse (строка, ' http://ww.w3.org/1999/xhtml ', верно ()))

Анализирует строку как HTML и / или XML, используя некоторые встроенные эвристические методы) управления предполагает открытие и закрытие элементов.

Он не имеет полное знание HTML DTD но есть полный список пустых элементов и полный список определений сущностей. HTML сущность, и ссылки на символы десятичных и шестнадцатеричной все. Примечание HTML-лица признаются, даже если HTML-режим = ЛОЖЬ ().

Имена элементов в нижнем регистре (если HTML-режим является истинным ()) и помещается в пространство имен, заданное параметром пространства имен (который может быть «» не для обозначения не-пространство имен, если входной сигнал не имеет explict объявления пространств имен, и в этом случае это будет удостоин ,

Имена атрибутов строчными, если HTML-режим = истина ()»

Прочитайте более подробное описание здесь .

Ответил 10/12/2008 в 03:21
источник пользователем

голоса
0

XPath не работает непосредственно с HTML. Взаимодействие XPath с HTML является dictacted любого программного обеспечения / библиотека разбора HTML в дерево рендеринга. Это может помочь направить свой поиск соответствующим образом.

Ответил 09/12/2008 в 23:40
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more