【问题标题】:Jsoup creating new elements when parsingJsoup在解析时创建新元素
【发布时间】:2014-05-26 07:34:14
【问题描述】:

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

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

以上正是我发送给Jsoup解析的内容。如您所见,里面有一个&lt;inner&gt; 标签,这是意料之中的。还预计这个&lt;inner&gt; 标签不会有闭包标签(实际上它只是其他东西的占位符 - 我不能改变这个设计)。 问题是,在将这个 XML 发送到 parse 方法之后,Jsoup 会自动创建 &lt;/inner&gt; 标记,因此会弄乱原始内容。

有没有办法让 Jsoup 只考虑完全打开和关闭的标签? 在这种情况下,TAG1 应该有内容 testTAG2 应该有内容 another&lt;inner&gt;tag。这是我需要的结果。常规 XML 解析器无法工作,因为我的数据不是完整的 XML,而实际上只是按标签组织的数据。

谢谢!

【问题讨论】:

    标签: xml parsing tags jsoup


    【解决方案1】:

    如果不接触代码,我猜这是不可能的。打开但未关闭的标签不是有效的 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>
    

    如果即使是一个如此封闭的标签也有问题,您必须进一步使用 regex 方式。

    【讨论】:

    • 谢谢!然而 只是一个例子,可以是其他任何东西。我通过不使用 Jsoup 解决了这个问题,这很可悲。我现在正在做自己的解析:/
    • 另一种选择:下载 Jsoup 源代码并手动修复此部分(未关闭的标签已关闭)。 Jsoup 是开源的,所以没有限制! :-)
    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2020-06-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多