【问题标题】:How can I get content of HTML <body>如何获取 HTML <body> 的内容
【发布时间】:2023-03-06 16:43:01
【问题描述】:

当我有 html 时:

<html>
<head>
</head>
<body>
 text
  <div>
  text2
    <div>
    text3
    </div>
  </div>
</body>
</html>

如何在正文的 JAVA 内容中使用 DOM 解析器: text <div> text2 <div> text3 </div> </div> 因为使用方法 getTextContent 返回:text text2 text3。 - 所以没有标签。

SAX 可以,但 DOM 也可以?

【问题讨论】:

  • 你使用的是什么 DOM 解析器?

标签: java html dom


【解决方案1】:

getTextContent 的行为符合我的预期——获取 HTML 片段的文本内容。你能检查一下 DOM 解析器的 API 文档,看看是否有类似的方法,名称类似于 getHtmlContent

【讨论】:

  • 我同意;您可以将整个事物视为 String 并使用 String.indexOf(..) 方法 subString(..) 正文标记中的所有内容。
【解决方案2】:

您需要将文档解析为 DOM 并仅序列化您想要的 DOM 部分。使用 DOM Level 3 LS 接口,您可以serialise 单个节点的外部 XML:

LSSerializer serializer= implementation.createLSSerializer();
String html= serializer.writeToString(node);

要获得内部 XML,您需要依次 writeToString 每个子节点(例如,进入 StringBuffer)。

根据您使用的 DOM 实现,可能会有替代的非标准方法。如果您正在这样做,将 HTML 序列化为 XML 也可能存在风险……例如。一个标准的 XML 序列化器可能会为一个空标签输出一个自闭合标签,这可能会混淆将输出解析为旧版 HTML 的浏览器。

【讨论】:

  • @schwiz:DOM Level 3 DOMImplementationLS 接口的实现。传统上,您会从document.implementation(Java 绑定中的getImplementation)获得一个。
  • document.getImplementation 返回一个不包括 createLSSerializer 的抽象实现。有小费吗?我正在使用 Android 附带的 DOM 3 级库。 developer.android.com/reference/org/w3c/dom/Document.html
  • @schwiz:通常您可以将 DOMImplementation 转换为 (DOMImplementationLS)。在某些绑定中,您可能需要调用 implementation.getFeature("LS", "3.0")
猜你喜欢
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
相关资源
最近更新 更多