解析时创建新元素的Jsoup

时间:2014-04-12 00:16:06

标签: xml parsing tags jsoup

我在标签的帮助下格式化了以下数据(即,因为它缺少XML声明而不是完全符合规范的XML):

<TAG1>test</TAG1>
<TAG2>another<inner>tag</TAG2>

以上就是我发送给Jsoup解析的内容。如您所见,内部有一个<inner>标记,这是预期的。它还预计这个<inner>标签不会有封闭标签(实际上它只是其他东西的占位符 - 我无法改变这种设计)。 问题是,在将此XML发送到parse方法后,Jsoup会自动创建</inner>标记,从而弄乱原始内容。

有没有办法让Jsoup只考虑完全打开和关闭的标签? 在这种情况下,TAG1应包含内容test,而TAG2应包含内容another<inner>tag。这是我需要的结果。常规XML解析器不起作用,因为我的数据不是完整的XML,而实际上只是按标签组织的数据。

谢谢!

1 个答案:

答案 0 :(得分:0)

没有触及代码,我猜不可能。已打开但未关闭的标签无效html。

您必须在此处构建解决方法。根据输入html的大小,您可以编写一些代码,自动关闭这些代码。对于小部件,您可以使用 regex (请注意:对于较大的Html,最好使用javas regex Parser类)。

示例:

String html = "<TAG1>test</TAG1>\n"
        + "<TAG2>another<inner>tag</TAG2>";

html = html.replaceAll("(?is)<inner>", "<inner />"); // use regex to close that tags

/*
 * If you dont want / need body / head tags, you can use an XML-Parser, else do as usual.
 */ 
Document doc = Jsoup.parse(html, "", Parser.xmlParser());

System.out.println(doc);

这是输出:

<tag1>
 test
</tag1> 
<tag2>
 another
 <inner />tag
</tag2>

即使是一个如此封闭的标签出现问题,你也必须进一步走正则表达式