ikorin24 / U8XmlParser

Extremely fast UTF-8 xml parser library
MIT License
96 stars 12 forks source link

Support nodes which have mixed content of node and text. #21

Closed ikorin24 closed 2 years ago

ikorin24 commented 2 years ago

Added Types and Methods

How it works

Node Enumeration

<root>
  aaa
  <foo>
    <baz>bbb</baz>
  </foo>
  ccc
  <bar/>
</root>
using XmlObject xml = XmlParser.Parse(xmlString);

// ----------------------------
// get children

// { <foo>, <bar> }
var children1 = xml.Root.Children;

// { <foo>, <bar> }
var children2 = xml.Root.GetChildren(XmlNodeType.ElementNode);

// { aaa, ccc }
var children3 = xml.Root.GetChildren(XmlNodeType.TextNode);

// { aaa, <foo>, ccc, <bar> }
var children4 = xml.Root.GetChildren(null);

// ----------------------------
// get descendants

// { <foo>, <baz>, <bar> }
var descendants1 = xml.Root.Descendants;

// { <foo>, <baz>, <bar> }
var descendants2 = xml.Root.GetDescendants(XmlNodeType.ElementNode);

// { aaa, bbb, ccc }
var descendants3 = xml.Root.GetDescendants(XmlNodeType.TextNode);

// { aaa, <foo>, <baz>, bbb, ccc, <bar> }
var descendants4 = xml.Root.GetDescendants(null);

// ----------------------------
// get all nodes in the xml

// { <root>, <foo>, <baz>, <bar> }
var allNodes1 = xml.GetAllNodes();

// { <root>, <foo>, <baz>, <bar> }
var allNodes2 = xml.GetAllNodes(XmlNodeType.ElementNode);

// { aaa, bbb, ccc }
var allNodes3 = xml.GetAllNodes(XmlNodeType.TextNode);

// { <root>, aaa, <foo>, <baz>, bbb, ccc, <bar> }
var allNodes4 = xml.GetAllNodes(null);

InnerText and Name properties

xml string NodeType Name InnerText
case 1 <node>text<n2></n2></node> ElementNode "node" ""
case 2 <node>text</node> ElementNode "node" "text"
case 3 <node><n2></n2></node> ElementNode "node" ""
case 4 text TextNode "" "text"
using var xml = XmlParser.Parse(
@"<root>
  aaa
  <foo>bbb</foo>
  <baz>
    <boo/>
  </baz>
</root>");

// (case 1) An element node which has element-text-mixed children.
XmlNode root = xml.Root;
// NodeType: ElementNode
// Name: "root"
// InnerText: ""

// (case 2) An element node which has only text children.
XmlNode foo = root.FindChild("foo");
// NodeType: ElementNode
// Name: "foo"
// InnerText: "bbb"

// (case 3) An element node which has only element children.
XmlNode baz = root.FindChild("baz");
// NodeType: ElementNode
// Name: "baz"
// InnerText: ""

// (case 4) A text node
XmlNode bbbText = foo.GetChildren(XmlNodeType.Text).First();
// NodeType: TextNode
// Name: ""
// InnerText: "bbb"

close #19