在Scala中解析HTML元标记

时间:2013-01-11 18:05:02

标签: regex scala

我正在尝试使用Scala解析元标记。我试过用XML匹配来做这个,比如

`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))
} 

但这似乎还有很长的路要走。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

Scala XML and TagSoup提供了一种直接在Scala XML中使用标记汤的方法。

如果您对替代品持开放态度,Scales Xmlparse html via alternative SAX parsers提供了类似的有用方法:

val html = loadXmlReader(htmlStream, parsers = AlternateSAXFactoryPool)

在该链接上提供了Tagsoup和Nu.Validator的示例工厂。