解析Scala中的HTML元标记
问题描述:
我正试图用Scala解析元标记。我试着只是做这个用XML匹配,就像解析Scala中的HTML元标记
`html // meta ...` etc,
,但我得到一个畸形的XML错误,因为这个特定页面上的这些元标签没有结束标签或... />
外壳。
所以以下HTML,
val html = """<meta name="description" content="This is some meta description">"""
我使用正则表达式如下匹配:
val metaDescription = """.*meta name="Description" content="([^"]+)"""".r
- 当我尝试搭配
val metaDescription(desc) = html
我得到一个scala.MatchError。 - 当我尝试
metaDescription.findAllIn(html)
并重复时,我得到整个字符串 - 不仅仅是描述。
我怎样才能得到content
内的值,而不是别的?
编辑
我得到了我想要与结果:
metaDescription.findAllIn(html).matchData foreach {
desc => println(desc.group(1))
}
,但似乎像绕很长的路要走。有更好的解决方案吗?
答
Scala XML and TagSoup提供了一种直接在Scala XML中使用标签汤的方法。
如果你是开放的替代品,然后Scales Xml提供parse html via alternative SAX parsers类似的有用的方法:提供的链接
val html = loadXmlReader(htmlStream, parsers = AlternateSAXFactoryPool)
为Tagsoup和Nu.Validator例如工厂。
+0
好吧,我同意不重新发明轮子 - 这些都很棒,谢谢 – JennyDanger
您应该使用html解析库 –
要重复上述情绪,您应该使用html解析库。 Html在创建自己的正则表达式时非常难以解析,让其他人为您完成工作。这也是SO的规范答案,看看任何有关使用正则表达式解析html的答案,并且您会发现使用解析库会更好。 –