Пример #1
0
        private void AddElementToParent(IQuickXmlItem item, XElement element, XNamespace qualifiedNamespace)
        {
            if (item.Depth == 0)
            {
                throw new InvalidDataException("Only one root element allowed.  Element '" + item.Name +
                                               "' is invalid, check leading whitespace.");
            }

            _elementLookup[item.Depth] = element;
            var parentElement = _elementLookup.LastOrDefault(i => i.Key < item.Depth).Value;

            if (qualifiedNamespace != null)
            {
                parentElement.Add(element);
                element.Name = qualifiedNamespace + element.Name.LocalName;
            }
            else
            {
                if (parentElement.Name.Namespace != XNamespace.None)
                {
                    element.Name = parentElement.Name.Namespace + element.Name.LocalName;
                }
                parentElement.Add(element);
            }
        }
Пример #2
0
        private XElement CreateElement(IQuickXmlItem item, ref XElement root)
        {
            XElement   element;
            XNamespace qualifiedNamespace = null;
            var        nameParts          = new PartName(item.Name);

            if (nameParts.IsTwoPart)
            {
                qualifiedNamespace = _namespacesLookup[nameParts.One];
                element            = new XElement(nameParts.Two);
            }
            else
            {
                element = new XElement(item.Name);
            }

            if (root == null)
            {
                root = element;
                _elementLookup[0] = root;
                return(element);
            }

            AddElementToParent(item, element, qualifiedNamespace);

            return(element);
        }
Пример #3
0
        private void CreateComment(IQuickXmlItem item, XContainer document = null)
        {
            var comment       = new XComment(item.Value);
            var parentElement = _elementLookup.LastOrDefault(i => i.Key < item.Depth).Value;

            if (parentElement != null)
            {
                parentElement.Add(comment);
            }
            else if (document != null)
            {
                document.Add(comment);
            }
        }
Пример #4
0
        private void AddAttribute(XElement element, IQuickXmlItem item)
        {
            if (element == null)
            {
                throw new InvalidDataException("Item of type " + item.Type + " found before first element.");
            }

            var nameParts = new PartName(item.Name);

            if (nameParts.IsTwoPart == false)
            {
                if (item.Name == Constants.Xmlns)
                {
                    element.Name = (XNamespace)item.Value + element.Name.LocalName;
                }
                else
                {
                    element.Add(new XAttribute(item.Name, item.Value));
                }
                return;
            }

            XNamespace ns;

            if (nameParts.One == Constants.Xmlns)
            {
                ns = item.Value.Trim();
                _namespacesLookup[nameParts.Two] = ns;
                element.Add(new XAttribute(XNamespace.Xmlns + nameParts.Two, item.Value));
                return;
            }

            if (_namespacesLookup.TryGetValue(nameParts.One, out ns) == false)
            {
                throw new InvalidDataException("Namespace definition not found for " + item.Name);
            }

            element.Add(new XAttribute(ns + nameParts.Two, item.Value));
        }
Пример #5
0
        private XElement CreateElement(IQuickXmlItem item, ref XElement root)
        {
            XElement element;
            XNamespace qualifiedNamespace = null;
            var nameParts = new PartName(item.Name);

            if (nameParts.IsTwoPart)
            {
                qualifiedNamespace = _namespacesLookup[nameParts.One];
                element = new XElement(nameParts.Two);
            }
            else
                element = new XElement(item.Name);

            if (root == null)
            {
                root = element;
                _elementLookup[0] = root;
                return element;
            }

            AddElementToParent(item, element, qualifiedNamespace);

            return element;
        }
Пример #6
0
        private void CreateComment(IQuickXmlItem item, XContainer document = null)
        {
            var comment = new XComment(item.Value);
            var parentElement = _elementLookup.LastOrDefault(i => i.Key < item.Depth).Value;

            if (parentElement != null)
                parentElement.Add(comment);
            else if (document != null)
                document.Add(comment);
        }
Пример #7
0
        private void AddElementToParent(IQuickXmlItem item, XElement element, XNamespace qualifiedNamespace)
        {
            if (item.Depth == 0)
                throw new InvalidDataException("Only one root element allowed.  Element '" + item.Name +
                                               "' is invalid, check leading whitespace.");

            _elementLookup[item.Depth] = element;
            var parentElement = _elementLookup.LastOrDefault(i => i.Key < item.Depth).Value;

            if (qualifiedNamespace != null)
            {
                parentElement.Add(element);
                element.Name = qualifiedNamespace + element.Name.LocalName;
            }
            else
            {
                if (parentElement.Name.Namespace != XNamespace.None)
                    element.Name = parentElement.Name.Namespace + element.Name.LocalName;
                parentElement.Add(element);
            }
        }
Пример #8
0
        private void AddAttribute(XElement element, IQuickXmlItem item)
        {
            if (element == null)
                throw new InvalidDataException("Item of type " + item.Type + " found before first element.");

            var nameParts = new PartName(item.Name);

            if (nameParts.IsTwoPart == false)
            {
                if (item.Name == Constants.Xmlns)
                {
                    element.Name = (XNamespace) item.Value + element.Name.LocalName;
                }
                else
                    element.Add(new XAttribute(item.Name, item.Value));
                return;
            }

            XNamespace ns;

            if (nameParts.One == Constants.Xmlns)
            {
                ns = item.Value.Trim();
                _namespacesLookup[nameParts.Two] = ns;
                element.Add(new XAttribute(XNamespace.Xmlns + nameParts.Two, item.Value));
                return;
            }

            if (_namespacesLookup.TryGetValue(nameParts.One, out ns) == false)
                throw new InvalidDataException("Namespace definition not found for " + item.Name);

            element.Add(new XAttribute(ns + nameParts.Two, item.Value));
        }