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"
InnerText returns empty if the node has children of both text and element nodes. (case 1)
If the node is TextNode, Name returns empty and InnerText is the text of itself. (case 4)
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"
Added Types and Methods
enum U8Xml.XmlNodeType
in
struct XmlNode
XmlNodeType NodeType { get; }
XmlNodeList GetChildren(XmlNodeType?)
XmlNodeDescendantList GetDescendants(XmlNodeType?)
in
class XmlObject
AllNodeList GetAllNodes(XmlNodeType?)
in
struct XmlObjectUnsafe
AllNodeList GetAllNodes(XmlNodeType?)
How it works
Node Enumeration
XmlNodeType.ElementNode
.InnerText
andName
properties<node>text<n2></n2></node>
"node"
""
<node>text</node>
"node"
"text"
<node><n2></n2></node>
"node"
""
text
""
"text"
InnerText
returns empty if the node has children of both text and element nodes. (case 1)Name
returns empty andInnerText
is the text of itself. (case 4)close #19