如何让 JTIdy 使 HTML 文档格式正确?

Posted

技术标签:

【中文标题】如何让 JTIdy 使 HTML 文档格式正确?【英文标题】:How do I make JTIdy make HTML documents well-formed? 【发布时间】:2012-05-10 13:55:10 【问题描述】: 【参考方案1】:

如果你想要 XML 格式,你需要为 Tidy 指定几个标志

private String cleanData(String data) throws UnsupportedEncodingException 
    Tidy tidy = new Tidy();
    tidy.setInputEncoding("UTF-8");
    tidy.setOutputEncoding("UTF-8");
    tidy.setWraplen(Integer.MAX_VALUE);
    tidy.setPrintBodyOnly(true);
    tidy.setXmlOut(true);
    tidy.setSmartIndent(true);
    ByteArrayInputStream inputStream = new ByteArrayInputStream(data.getBytes("UTF-8"));
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    tidy.parseDOM(inputStream, outputStream);
    return outputStream.toString("UTF-8");

或者只是如果想要 Xhtml 表单

Tidy tidy = new Tidy();
tidy.setXHTML(true);

【讨论】:

我用“setXmlOut”和“setXHTML”都试过了,但都没有生成由“document = tidy.parseDOM(...)”返回的格式良好的文档。此外,JTidy 正在吐出消息,“在使用 HTML Tidy 生成整理后的版本之前,必须修复此文档的错误。”【参考方案2】:

使用 tidy.setXmlTags(true);解析 XML 而不是 HTML

【讨论】:

它适用于我的 HTML 解析问题之一。谢谢 :)【参考方案3】:

即使发现错误,也可以使用Tidy.setForceOutput(true)(风险自负)生成输出。

【讨论】:

【参考方案4】:

我解析 HTML 2 次以获得格式良好的 xml

  BufferedReader br = new BufferedReader(new StringReader(str));
  StringWriter sw = new StringWriter();

  Tidy t = new Tidy();
  t.setDropEmptyParas(true);
  t.setShowWarnings(false); //to hide errors
  t.setQuiet(true); //to hide warning
  t.setUpperCaseAttrs(false);
  t.setUpperCaseTags(false);
  t.parse(br,sw);
  StringBuffer sb = sw.getBuffer();
  String strClean = sb.toString();
  br.close();
  sw.close();

  //do another round of tidyness
  br = new BufferedReader(new StringReader(strClean));
  sw = new StringWriter();

  t = new Tidy();
  t.setXmlTags(true);
  t.parse(br,sw);
  sb = sw.getBuffer();
  String strClean2 = sb.toString();
  br.close();
  sw.close();

【讨论】:

以上是关于如何让 JTIdy 使 HTML 文档格式正确?的主要内容,如果未能解决你的问题,请参考以下文章

如何最好地将 JTidy 与 Spring servlet 容器一起使用?

HTML中CSS外部样式表

如何在文本区域内显示 HTML 格式? [复制]

如何使用 PHP 将文本区域数据从 HTML 文档发送到 MySQL 数据库?

前端知识大全

前端知识大全