在Scala中解析没有引号的XML

时间:2011-11-21 22:33:38

标签: xml scala

我正在尝试使用scala解析一些生成不良的xml代码,如下所示:

<contextfile concordance=brown>
<context filename=br-a01 paras=yes>
<p pnum=1>
<s snum=1> 
<wf cmd=ignore pos=DT>The</wf>
</s>
</p>
...

结构良好,但正如您所看到的,任何attribube值都没有引号。使用下面的Scala片段简化打开文件会引发一个不那么令人惊讶的错误:

val semCor = XML.loadFile(args(0)) 

引发

org.xml.sax.SAXParseException: Open quote is expected for attribute "{1}" associated with an  element type  "concordance".

我想知道如果可能的话,设置scala xml解析器以正确解析此输入,就好像有关于属性值的引号一样。

感谢您的任何建议!

3 个答案:

答案 0 :(得分:6)

在Scala中无法将解析器配置到该范围。但是,由于您的XML格式错误,您可以使用HTML整齐的库(例如JSoupTagSoup)来首先整理XML,然后使用Scala XML解析它。或者直接使用JSoup从XMl获取所需的数据。

答案 1 :(得分:2)

为什么将其称为XML?事实并非如此。您可以将Scala程序称为C#程序。没有任何XML解析器可以理解它。您使用完全专有的格式进行数据交换,您有两种选择:转而使用XML,或为其编写完全专有的解析器。

答案 2 :(得分:0)

无法配置解析器。您的解析器不会接受“格式不正确”的XML。也许你应该考虑第一遍来添加引号。在一般情况下,不可能知道如何处理这个问题,但在特定情况下它可能非常容易,例如,如果属性值不包含任何空格,引用,“&amp;”或“&lt;”字符。