我正在尝试使用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))
}
但这似乎还有很长的路要走。有更好的解决方案吗?
答案 0 :(得分:2)
Scala XML and TagSoup提供了一种直接在Scala XML中使用标记汤的方法。
如果您对替代品持开放态度,Scales Xml为parse html via alternative SAX parsers提供了类似的有用方法:
val html = loadXmlReader(htmlStream, parsers = AlternateSAXFactoryPool)
在该链接上提供了Tagsoup和Nu.Validator的示例工厂。