markup2json static method
将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;
}