simonkimi / xpath_selector

An XPath selector for locating Html and Xml elements
BSD 3-Clause "New" or "Revised" License
20 stars 4 forks source link

请问一下如何获得html格式的内容? #13

Closed yzxh24 closed 1 year ago

yzxh24 commented 1 year ago

通过 XPathNode 的 text 属性获得的内容会将里面的 html 标记都过滤掉,但是某些情况下我们有可能需要保留那些 html 标记,类似下面这种:

<html>
<head><title><title></head>
<body>
    <ul>
      <li class='a'><a href="">Item 1</a></li>
      <li class='a'><a href="">Item 2</a></li>
      <li class='a'><a href="">Item 3</a></li>
    </ul>
</bdoy>
</html>

通过 //ul/li 获取到的内容 a 标记都自动被清理掉了。

simonkimi commented 1 year ago

可以直接获取html包中的对象, 然后使用它的innerHtml属性

import 'package:html/parser.dart';
import 'package:xpath_selector_html_parser/src/ext.dart';
import 'package:html/dom.dart';

void main() {
  final html = """
  <html>
    <body>
        <ul>
          <li class='a'><a href="">Item 1</a></li>
          <li class='a'><a href="">Item 2</a></li>
          <li class='a'><a href="">Item 3</a></li>
        </ul>
    </body>
</html>
  """;

  parse(html)
      .documentElement!
      .queryXPath('//ul/li')
      .nodes
      .map((e) => (e.node as Element).innerHtml)
      .forEach(print);
}
<a href="">Item 1</a>
<a href="">Item 2</a>
<a href="">Item 3</a>
yzxh24 commented 1 year ago

谢谢🙏