JDOM HTML 到 XML 的转换 - 即使它有一个子节点,也会生成父节点 selfend 标记

Posted

技术标签:

【中文标题】JDOM HTML 到 XML 的转换 - 即使它有一个子节点,也会生成父节点 selfend 标记【英文标题】:JDOM HTML to XML Conversion - parent node selfend tag generating eventhough it having a child node 【发布时间】:2017-07-30 00:06:38 【问题描述】:

JDOM 解析器用于解析和转换 html 文件到 XML 文件。解析html文件后,即使它有一个子节点,也会生成自结束标记。 输入HTML

<li id="fieldId1" fieldtype="dropdownFromList">
    <span>
    <sflabel path="polProdCode">
    <fmtmessage key="mpolicy.policy.polProdCode.lable" />
    </sflabel>
    </span>
</li>

输出XML

         <span>
         <sflabel path="polProdCode" />  ---sflabel tag selfclosing after the conversion
         <fmtmessage key="mpolicy.policy.polProdCode.lable" />
         </span>

预期的 XML

          <span>
          <sflabel path="polProdCode" >
          <fmtmessage key="mpolicy.policy.polProdCode.lable" />
          </sflabel>      ----need endtag
          </span>

Java 代码

    SAXBuilder saxBuilder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser", false);
File log = new File("log.html");
        org.jdom.Document jdomDocument = saxBuilder.build(log);
        XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());

            fwOutXml = new FileWriter("output.xml");
            bwOutXml = new BufferedWriter(fwOutXml);
            outputter.output(jdomDocument, bwOutXml);

【问题讨论】:

这几乎肯定是 tagoup 库中的一个问题.... JDOM 实际上并不是解析器,它只是一个内存模型。 tagsoup 库是解析器,它必须在 SAX 流上提供错误的事件。 是否有任何替代 saxDriverClass 来克服这个问题? 【参考方案1】:

我已通过删除 saxdriverclass 并留空来修复转换

     SAXBuilder saxBuilder = new SAXBuilder();

【讨论】:

以上是关于JDOM HTML 到 XML 的转换 - 即使它有一个子节点,也会生成父节点 selfend 标记的主要内容,如果未能解决你的问题,请参考以下文章

JDOM读取xml

Java xml和json互相转换方法

java将XML文档转换成json格式数据

Java中的解析字节数组

xml字符串的解析

android异常,即使jdom库存在