JSoup - 内部属性的引用

时间:2011-11-02 09:53:47

标签: html xml jsoup

我正在使用JSoup尝试从几个网站构建有效的XML。它大部分时间都表现得非常好,但是最近我遇到了一些糟糕的HTML,而JSoup似乎无法修复。

<meta name="saploTags" content="Tag1,Tag2,Tag3," Tag4,Tag5,Tag6"/> 

结果

<meta name="saploTags" content="Tag1,Tag2,Tag3," tag4,tag5,tag6"="" />

当我尝试索引生成的XML时,这会导致问题。有没有人有什么建议怎么办?我最好在最左边和最右边的引号之间以某种方式转义或删除所有内容,以防止数据丢失(例如content =“Tag1,Tag2,Tag3,Tag4,Tag5,Tag6”。否则如果JSoup就可以了。在第一个“结束引用”之后切断,忽略最后一个标签,例如content =“Tag1,Tag2,Tag3”。

(我发现的类似问题是例如<img src=".." alt="This text contains the quote "The quote" and here's some more text"/>导致类似问题)

有可能用jsoup来解决这个问题,还是我走到了死胡同?

/问候,马格努斯

1 个答案:

答案 0 :(得分:0)

这完全不是有效的XML,也不是HTML。如果要将这些双引号视为属性值的一部分,则应将这些双引号转换为字符引用。即使您可以将解析器设置得非常宽松,也无法解决这个问题,因为它不再清楚属性内容的结束位置。

尝试自动解决这个问题似乎相当困难。各种各样的角落案件都会对任何类型的解决方案造成严重破坏。这应该如何解释,例如:

<element attribute="this isn't "quite" the=correct way="to=" do things"" />

看看SO代码格式化程序如何与之斗争。

即使自己理解这一点也很困难,更不用说编写一个能够理解属性内容是什么或不是什么的工具。

简单的方法?只是不要接受无效的HTML。它足够宽松,大多数解析器允许小写和大写元素名称,结束标记并不总是强制性的等等。如果人们仍设法生成无效的HTML,那么对他们来说太糟糕了。