2009-05-18 58 views
0

我使用Saxon 9来分析无效的html源文件。具体的HTML有类似下面的HREF值:XSLT和XQuery无效html输入,URI片段看起来像实体

< A HREF = “?blah.asp FN =视图& g_varID = 1234” >一些文本</A >

遇到错误:

“XML解析器报告的错误:对实体”g_varID“的引用必须以 结束';'分隔符“。

xml解析器正在读取“& g_varID”字符串,并抱怨应该有一个“;”划定实体。但是,当然,这不是一个HTML实体 - 它只是一个URI的一部分。

如何告诉解析器忽略它?注意:我使用非架构感知的Saxon,而不是Saxon-SA。

回答

1

确保你有一个正确的xhtml DOCTYPE。根据我所看到的xhtml1-strict.dtd,href属性被声明为CDATA,而不是PCDATA,这意味着文字&完全可以,不应该被解析为实体。

3

如果您的HTML不是XML,那么您如何期待任何XML处理器来处理它?

+0

对,当然。它是无效的,所以不是XML。但它是完美的。我想我的更一般的问题是,“我可以告诉处理器放松验证足以通过这个字符串吗?” – 2009-05-18 19:21:56

+0

处理器正在处理XML。你的意思是它的结构良好,但不是XML?如果你想处理不是XML的HTML,那么你使用HTML处理器,而不是XML处理器。 – 2009-05-18 19:31:43

0

如上所述,这是无效的XML,它是HTML。但是,这个特定的问题是默认情况下HTML整理的一个问题:http://www.w3.org/People/Raggett/tidy/。用下面的命令行参数使用它的HTML转换为XHTML:

tidy -asxhtml foo.html > foo.xhtml 

然后你应该能够通过你的XSLT来运行它。