コード例 #1
0
ファイル: XMLParser.cs プロジェクト: HiKami172/CSharpLab3
        private static XMLNode FirstLoadNode(StreamReader input, string rootName = "")
        {
            if (rootName == string.Empty)
            {
                rootName = input.ReadLine();
            }

            var root      = new XMLNode(rootName.Substring(1, rootName.Length - 2), new Dictionary <string, string>());
            var nodeAttrs = root.GetDictionary();

            for (string line; (line = input.ReadLine()) != string.Empty && Lstrip(ref line)[1] != '/';)
            {
                if (line == string.Concat("</", rootName.Substring(1)))
                {
                    break;
                }
                if (line == Split(line, "</").Item1)
                {
                    root.AddChild(FirstLoadNode(input, line));
                    continue;
                }
                var(name, closeAction) = Split(Lstrip(ref line), "</");
                var(nodeName, value)   = Split(name, ">");
                nodeName = nodeName.Substring(1, nodeName.Length - 1);
                if (nodeName != closeAction.Substring(0, closeAction.LastIndexOf('>')))
                {
                    throw new ArgumentException("Tag is not opened/closed:"
                                                + nodeName + "!=" + closeAction.Substring(0, closeAction.Length - 2));
                }
                if (name != string.Empty && value != string.Empty)
                {
                    nodeAttrs[nodeName] = value;
                }
            }
            return(root);
        }
コード例 #2
0
ファイル: XMLParser.cs プロジェクト: HiKami172/CSharpLab3
 public void AddChild(XMLNode node)
 {
     children.Add(node);
 }
コード例 #3
0
ファイル: XMLParser.cs プロジェクト: HiKami172/CSharpLab3
 public XMLDocument(XMLNode root)
 {
     Root = root;
 }
コード例 #4
0
ファイル: XMLParser.cs プロジェクト: HiKami172/CSharpLab3
 public bool FindNode(XMLNode lhs)
 {
     return(lhs.name == _str);
 }