markup2json static method

dynamic markup2json(
  1. String markupString
)

将HTML/XML字符串转换为Node

Implementation

static Node markup2json(String markupString) {
  markupString = _removeDOCTYPE(markupString);
  List<Node> bufArray = [];
  RootNode results = RootNode([]);
  HtmlParser(markupString, {
    "start": (String tag, List<Attribute> attrs, bool unary) {
      ElementNode elementNode = ElementNode(tag: tag.trim());
      if (attrs.isNotEmpty) {
        elementNode.attributes = attrs;
      }
      if (unary) {
        var parent =
            (bufArray.isNotEmpty ? bufArray[0] : results) as ElementNode;
        if (parent.children == null) {
          parent.children = [];
        }
        parent.children?.add(elementNode);
      } else {
        bufArray.insert(0, elementNode);
      }
    },
    "end": (String tag) {
      if (tag.trim().isEmpty) return;

      var node = bufArray.removeAt(0) as ElementNode;
      if (node.tag != tag) print('invalid state: mismatch end tag: $node');

      if (bufArray.isEmpty) {
        results.children?.add(node);
      } else {
        var parent = bufArray[0] as ElementNode;
        if (parent.children == null) {
          parent.children = [];
        }
        parent.children?.add(node);
      }
    },
    "chars": (String text) {
      if (text.trim().isEmpty) {
        return;
      }

      TextNode textNode = TextNode(text);
      if (bufArray.isEmpty) {
        results.children?.add(textNode);
      } else {
        var parent = bufArray[0] as ElementNode;
        if (parent.children == null) {
          parent.children = [];
        }
        parent.children?.add(textNode);
      }
    },
    "comment": (String text) {
      CommentNode commentNode = CommentNode(text);
      var parent = bufArray[0] as ElementNode;
      if (parent.children == null) {
        parent.children = [];
      }
      parent.children?.add(commentNode);
    }
  });
  return results;
}