我使用 XSLT 1.0 从 Wikipedia infoboxes 中提取信息,并且对于某些链接,从更多 Wikipedia 站点获取附加信息。
原则上,这可以正常工作,除非为 Wikipedia 页面返回的 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,结果都一样。