Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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;

                }
            }
        }