예제 #1
0
        private ContentFileV2.Target ReadTargetElement()
        {
            ContentFileV2.Target target = new ContentFileV2.Target();

            target.LineNumber = ((IXmlLineInfo)reader).LineNumber;
            target.Name       = reader.GetAttribute("Name");

            if (String.IsNullOrWhiteSpace(target.Name))
            {
                throw new XmlException("Target 'Name' attribute must be set");
            }

            target.Inputs = reader.GetAttribute("Inputs");

            if (target.Inputs == null)
            {
                target.Inputs = String.Empty;
            }

            target.Inputs = target.Inputs.Trim();

            target.Outputs = reader.GetAttribute("Outputs");

            if (String.IsNullOrWhiteSpace(target.Outputs))
            {
                throw new XmlException("'Outputs' attribute must be set");
            }

            target.Outputs = target.Outputs.Trim();

            reader.ReadStartElement();
            reader.MoveToContent();

            // Is there a nested PropertyGroup?
            if (reader.NodeType == XmlNodeType.Element && String.ReferenceEquals(propertyGroupAtom, reader.Name))
            {
                target.Properties = ReadPropertyGroupElement();
            }

            // Is there a separate Target end tag?
            if (reader.NodeType == XmlNodeType.EndElement && String.ReferenceEquals(targetAtom, reader.Name))
            {
                reader.ReadEndElement();
                reader.MoveToContent();
            }

            return(target);
        }
        private ContentFileV2.Target ReadTargetElement()
        {
            ContentFileV2.Target target = new ContentFileV2.Target();

            target.LineNumber = ((IXmlLineInfo)reader).LineNumber;
            target.Name = reader.GetAttribute("Name");

            if (String.IsNullOrWhiteSpace(target.Name))
                throw new XmlException("Target 'Name' attribute must be set");

            target.Inputs = reader.GetAttribute("Inputs");

            if (target.Inputs == null)
                target.Inputs = String.Empty;

            target.Inputs = target.Inputs.Trim();

            target.Outputs = reader.GetAttribute("Outputs");

            if (String.IsNullOrWhiteSpace(target.Outputs))
                throw new XmlException("'Outputs' attribute must be set");

            target.Outputs = target.Outputs.Trim();

            reader.ReadStartElement();
            reader.MoveToContent();

            // Is there a nested PropertyGroup?
            if (reader.NodeType == XmlNodeType.Element && String.ReferenceEquals(propertyGroupAtom, reader.Name))
            {
                target.Properties = ReadPropertyGroupElement();
            }

            // Is there a separate Target end tag?
            if (reader.NodeType == XmlNodeType.EndElement && String.ReferenceEquals(targetAtom, reader.Name))
            {
                reader.ReadEndElement();
                reader.MoveToContent();
            }

            return target;
        }
예제 #3
0
        private ContentFileV2 ReadContentElement()
        {
            ContentFileV2 data = new ContentFileV2();

            string version = reader.GetAttribute("Version");

            if (String.IsNullOrEmpty(version))
            {
                throw new XmlException("Version attribute not present");
            }

            if (version != "2")
            {
                throw new XmlException("Version attribute must be 2");
            }

            reader.ReadStartElement(contentAtom);
            reader.MoveToContent();

            data.Items   = new List <ContentFileV2.Item>();
            data.Targets = new List <ContentFileV2.Target>();

            while (true)
            {
                if (String.ReferenceEquals(reader.Name, contentAtom))
                {
                    reader.ReadEndElement();
                    reader.MoveToContent();
                    break;
                }

                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (String.ReferenceEquals(reader.Name, itemGroupAtom))
                    {
                        List <ContentFileV2.Item> items = ReadItemGroupElement();

                        data.Items.AddRange(items);
                        continue;
                    }
                    else if (String.ReferenceEquals(reader.Name, targetAtom))
                    {
                        ContentFileV2.Target target = ReadTargetElement();

                        foreach (var otherTarget in data.Targets)
                        {
                            if (String.CompareOrdinal(target.Name, otherTarget.Name) == 0)
                            {
                                throw new XmlException("Duplicate target name '{0}'".CultureFormat(target.Name));
                            }
                        }

                        data.Targets.Add(target);
                        continue;
                    }
                }

                throw new XmlException("Expected ItemGroup, PropertyGroup or Target element");
            }

            return(data);
        }