Xml parsing 在WebHarvest中禁用XML验证

Xml parsing 在WebHarvest中禁用XML验证,xml-parsing,xsd,webharvest,Xml Parsing,Xsd,Webharvest,我已经在苹果的应用商店发布了一个移动应用程序 此SPI客户端应用程序使用服务器端的Rest API来检索有关特定公交车站公交车到达的实时信息 这个应用程序在6个月的时间里一直很有魅力 Rest API使用WebHarvest从网站中删除真实数据信息,例如: 几天前,通过添加以下行,从我的服务器端代码中刮取的HTML页面发生了更改: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org

我已经在苹果的应用商店发布了一个移动应用程序

此SPI客户端应用程序使用服务器端的Rest API来检索有关特定公交车站公交车到达的实时信息

这个应用程序在6个月的时间里一直很有魅力

Rest API使用WebHarvest从网站中删除真实数据信息,例如:

几天前,通过添加以下行,从我的服务器端代码中刮取的HTML页面发生了更改:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
提前感谢。

您可以尝试在通话中使用省略htmlenvelope=true


然而,不幸的是,正如您所说的,我无法重现您得到的错误,也无法测试结果…

xpath计算器引发org.xml.sax.saxpassessexception时也出现了类似的问题

publicId和systemId之间需要空格

当您可以更改原始xml时,此问题的解决方案已经解决

Webharvest在引擎盖下使用。我使用完整的WebHarvest项目,因此可以防止将html上的doctype标记添加到xml中

我使用html cleaner版本2.6.1,并修改了org.webharvest.runtime.processors.HtmlToXmlProcessor来支持这个新版本

HtmlCleaner cleaner = new HtmlCleaner( );
CleanerProperties cleanerProperties = cleaner.getProperties();
由于html cleaner完全支持对doctype进行ommiting,因此我补充说,将来可能会通过使用scraper xml的额外属性来实现这一点

cleanerProperties.setOmitDoctypeDeclaration(true);

希望它能有所帮助,感谢webharvest的创建者,它是一个非常好而且非常可靠的工具

你可以测试一下。获取我的配置文件并使用WebHarvest GUI运行。我们可以看到每个变量的值。但是,如果我使用OmitHtmlenDevelope=true选项,则不会检索到任何值。无论如何,感谢您帮助我确认您正在运行哪个版本的webharvest?1.0, 2.0, 2.1? 我不能重新创建你的错误,我的意思是我可以运行你的脚本,就像你在WH 2.0 GUI中发布的那样,它通过ok运行,并按预期填充变量。在我的应用程序中,我使用的是WebHarvest 2.1.0-RC1。几天前还在工作。正如我向您提到的,如果我使用GUI运行,那么一旦WebHarvest从HTML转换为XML,它就会从XML中删除DOCTYPE行。在我的服务器中,DOCTYPE仍然存在。我想知道WebHarvest可能有一些设置可以忽略该行或禁用XML验证。当我说它不起作用时,意味着它没有解决我的问题。ommithtmlenvelope=true删除了DOCTYPE,但也删除了HTML和BODY标记。所以现在我没有根元素,xpath告诉我以下消息:根元素后面的文档中的标记必须是格式良好的。当我在GUI或headless中运行脚本时,我没有收到任何错误。这向我表明:由于代理、IP过滤、阻止等原因,您的服务器从metlink获得的响应与我们在桌面上看到的不同。或者您在机器和服务器上使用的webharvest/java版本不同,或者您在服务器上运行的脚本与您在此处发布的脚本不相同。
<var-def name="pageContentStr">
    <html-to-xml omithtmlenvelope="true">
        <http url="http://www.metlink.org.nz/stop/${stationID.toString()}/departures" />
    </html-to-xml>
</var-def>
HtmlCleaner cleaner = new HtmlCleaner( );
CleanerProperties cleanerProperties = cleaner.getProperties();
cleanerProperties.setOmitDoctypeDeclaration(true);