private bool goDeeper(XMLElement node) { bool result = false; if (node.hasChildren()) { List <XMLElement> chList = node.getChildrenList(); XMLElement child; for (int i = 0; i < chList.Count; ++i) { child = chList[i]; if (goDeeper(child)) { if (!node.hasAttribute(child.Name)) { node.addAttribute(new XMLAttribute(child.Name, child.getText())); node.removeChildAt(i); --i; // to keep it normal } } } var newChild = new XMLElement("newChild"); newChild.addAttribute(new XMLAttribute("status", "added")); node.addChild(newChild); } else { if (!node.hasAttributes()) { result = true; } } return(result); }
internal XMLElement readElement(System.String name) { XMLElement elem = new XMLElement(name); System.String attribute; XMLScanner.Token tkn; while (true) { switch (scanner.scan()) { case XMLScanner.Token.GTS: return elem; case XMLScanner.Token.GT: while ((tkn = scanner.scan()) == XMLScanner.Token.LT) { if (scanner.scan() != XMLScanner.Token.IDENT) { throwException("Element name expected"); } System.String siblingName = scanner.Identifier; XMLElement sibling = readElement(siblingName); elem.addSibling(sibling); } switch (tkn) { case XMLScanner.Token.SCONST: elem.StringValue = scanner.String; tkn = scanner.scan(); break; case XMLScanner.Token.ICONST: elem.IntValue = scanner.Int; tkn = scanner.scan(); break; case XMLScanner.Token.FCONST: elem.RealValue = scanner.Real; tkn = scanner.scan(); break; case XMLScanner.Token.IDENT: if (scanner.Identifier.Equals("null")) { elem.setNullValue(); } else { elem.StringValue = scanner.Identifier; } tkn = scanner.scan(); break; } if (tkn != XMLScanner.Token.LTS || scanner.scan() != XMLScanner.Token.IDENT || !scanner.Identifier.Equals(name) || scanner.scan() != XMLScanner.Token.GT) { throwException("Element is not closed"); } return elem; case XMLScanner.Token.IDENT: attribute = scanner.Identifier; if (scanner.scan() != XMLScanner.Token.EQ || scanner.scan() != XMLScanner.Token.SCONST) { throwException("Attribute value expected"); } elem.addAttribute(attribute, scanner.String); continue; default: throwException("Unexpected token"); break; } } }