java - JSoup 未生成有效的 XHTML

标签 java jsoup

我正在使用 JSoup 动态设置 <base/> 的 href 属性HTML 文档中的元素。除了关闭 </base> 之外,这按预期工作。修改后的 HTML 中省略了标签。

有没有办法让 JSOUP 返回有效的 XHTML?

输入:

<html><head><base href="xyz"/></head><body></body></html>

输出:

<html>
 <head>
  <base href="https://myhost:8080/myapp/"> <-- missing closing tag
 </head>
 <body></body>
</html>

代码:

  protected String modifyHtml(HttpServletRequest request, String html)
  {
    Document document = Jsoup.parse(html);
    document.outputSettings().escapeMode(EscapeMode.xhtml);
    Elements baseElements = document.select("base");

    if (!baseElements.isEmpty())
    {
      Element base = baseElements.get(0);
      base.attr("href", getBaseUrl(request));
    }

    return document.html();
  }

最佳答案

除了(或代替)转义模式之外,您还需要设置语法:

document.outputSettings().syntax(Document.OutputSettings.Syntax.xml);

关于java - JSoup 未生成有效的 XHTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39365953/

相关文章:

java - 在 selenium 脚本中从 Excel 获取数据时收到警告

java - 在 Spring + mysql 中使用 ACID 属性进行批量更新

java - 将具有可变长度记录的文件转换为Java中的固定长度记录

java - 无法在 Spring Boot 测试中模拟persistenceContext

java - 如何在 jsoup 解析中保留大小写?

email - 如何使用 JSOUP 解析 [email protected] 数据

java - 解析 HTML 以获取内容及其标签

java - 获取 div 标签 jsoup 中的 src 属性

java - 获取 onVisibilityChange ActionListener

java - JSoup 的 select() 方法是上下文相关的吗?