Я использую XSLT 1.0 для извлечения информации из инфобокс Википедии, а для некоторых ссылок - дополнительную информацию с других сайтов Википедии.Как открыть недействительный HTML (из Википедии) через document() в XSLT?
В принципе, это работает отлично, если HTML-код, возвращенный для страниц Википедии, недействителен. К сожалению, это происходит для всех страниц, например, в русской Википедии. Попробуйте следующий пример
<xsl:for-each
select="document('http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B4%D0%B5%D0%BD_%D0%BA%D1%83%D0%BB%D1%8C%D1%82%D1%83%D1%80%D0%B0')//text()">
<xsl:value-of select="."/>
</xsl:for-each>
Неприятность состоит в том, что объект ® используется на каждой странице на этом языке издания, но не заявил: HTML-декларация страниц Википедии парализована.
<!DOCTYPE html>
Вместо, скажем,
<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Это явно проблема Wikipedia, не проблема XSLT, но есть ли обходной путь для разбора этих сайтов, тем не менее? Любые указатели на более надежный синтаксический анализатор XSLT? Есть ли способ внедрить объявления сущностей в HTML, прежде чем он будет разбираться?
До сих пор я пробовал XSLTproc, Saxon6.5.5, Saxon-B 9.1.0.8 и Xalan, все с одинаковым результатом.
Не XSLT только для XML? HTML не является XML. – svick
явно проблема с википедией. вы должны опубликовать в wikipedia, а не xslt. –
doctype '' - стандартное соответствие HTML-декларации, которое ставит современный браузер в «стандартном режиме». «Xhtml1-transitional.dtd» в HTML-файле будет синтаксической ошибкой, так как это XML DTD и синтаксис XML различны, –