Linq to XML - update/alter the nodes of an XML Document

后端 未结 6 1679
旧巷少年郎
旧巷少年郎 2020-11-29 06:04

I\'ve got 2 Questions:

1. I\'ve sarted working around with Linq to XML and i\'m wondering if it is possible to change an XML document via Linq. I mean, is there some

6条回答
  •  鱼传尺愫
    2020-11-29 06:36

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; //using System.Xml;

    namespace XMLtoLinqApp { class Program { static void Main(string[] args) {

            //XmlDocument doc = new XmlDocument();
            //XmlElement newBook=doc.CreateElement("BookParticipant");
            //newBook.SetAttribute("Author");
    
            //Using Functional Construction to Create an XML Schema
            XElement xBookParticipant = new XElement("BookParticipant",
                                            new XElement("FirstName", "Joe"),
                                            new XElement("LastName", "Rattz"));
            Console.WriteLine(xBookParticipant.ToString());
    
    
            //Creates the Same XML Tree as Listing 6-1 but with Far Less Code
            XElement xBookParticipants = new XElement("BookParticipants",
                                            new XElement("BookParticipant",
                                            new XAttribute("type", "Author"),
                                            new XElement("FirstName", "Joe"),
                                            new XElement("LastName", "Rattz")),
                                            new XElement("BookParticipant",
                                            new XAttribute("type", "Editor"),
                                            new XElement("FirstName", "Ewan"),
                                            new XElement("LastName", "Buckingham")));
            Console.WriteLine(xBookParticipants.ToString());
    
    
            //-- Disadvatages of XML document
            //System.Xml.XmlElement xmlBookParticipant = new System.Xml.XmlElement("BookParticipant");
            XElement xeBookParticipant = new XElement("BookParticipant");
    
    
            XDocument xDocument = new XDocument(new XElement("BookParticipants",
                                                new XElement("BookParticipant",
                                                new XAttribute("type", "Author"),
                                                new XElement("FirstName", "Joe"),
                                                new XElement("LastName", "Rattz"))));
            Console.WriteLine(xDocument.ToString());
    
    
            //--Calling the ToString Method on an Element Produces the XML Tree
            XElement name = new XElement("Name", "Joe");
            Console.WriteLine(name.ToString());
    
            //--Console.WriteLine Implicitly Calling the ToString Method on an Element to Produce an XML Tree
    
    
            XElement name1 = new XElement("Person",
                                          new XElement("FirstName", "Joe"),
                                          new XElement("LastName", "Rattz"));
            Console.WriteLine(name1);
    
            //-- Casting an Element to Its Value’s Data Type Outputs the Value
            Console.WriteLine(name);
            Console.WriteLine((string)name);
    
            //--Different Node Value Types Retrieved via Casting to the Node Value’s Type
            XElement count = new XElement("Count", 12);
            Console.WriteLine(count);
            Console.WriteLine((int)count);
    
            XElement smoker = new XElement("Smoker", false);
            Console.WriteLine(smoker);
            Console.WriteLine((bool)smoker);
    
            XElement pi = new XElement("Pi", 3.1415926535);
            Console.WriteLine(pi);
            Console.WriteLine((double)pi);
    
    
            DeferredQryProblem();
    
    
            GenerateXMlFromLinqQry();
    
            WithoutReaching();
    
            Ancestors();
    
    
            AncestorsAndSelf();
    
            SortSample();
    
            FindElementwithSpecificChild();
    
        }
    
        private static void DeferredQryProblem()
        {
            XDocument xDocument = new XDocument(
                        new XElement("BookParticipants",
                        new XElement("BookParticipant",
                        new XAttribute("type", "Author"),
                        new XElement("FirstName", "Joe"),
                        new XElement("LastName", "Rattz")),
                        new XElement("BookParticipant",
                        new XAttribute("type", "Editor"),
                        new XElement("FirstName", "Ewan"),
                        new XElement("LastName", "Buckingham"))));
            IEnumerable elements =
            xDocument.Element("BookParticipants").Elements("BookParticipant");
            foreach (XElement element in elements)
            {
                Console.WriteLine("Source element: {0} : value = {1}",
                element.Name, element.Value);
            }
            foreach (XElement element in elements)
            {
                Console.WriteLine("Removing {0} = {1} ...", element.Name, element.Value);
                element.Remove();
            }
            Console.WriteLine(xDocument);
    
    
            foreach (XElement element in elements)
            {
                Console.WriteLine("Source element: {0} : value = {1}",
                element.Name, element.Value);
            }
            foreach (XElement element in elements.ToArray())
            {
                Console.WriteLine("Removing {0} = {1} ...", element.Name, element.Value);
                element.Remove();
            }
            Console.WriteLine(xDocument);
        }
    
        //-- Creating an Attribute and Adding It to Its Element
        private static void CreatingAttribute()
        {
            XElement xBookParticipant = new XElement("BookParticipant", new XAttribute("type", "Author"));
            Console.WriteLine(xBookParticipant);
        }
    
        //--Creating a Comment with Functional Construction
        private static void CreatingComment()
        {
            XElement xBookParticipant = new XElement("BookParticipant",
                                                      new XComment("This person is retired."));
            Console.WriteLine(xBookParticipant);
        }
    
        //--Creating a Declaration with Functional Construction
        private static void CreateXmlDeclaration()
        {
            XDocument xDocument = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"),
    

    new XElement("BookParticipant")); Console.WriteLine(xDocument); }

        private static void GenerateXMlFromLinqQry()
        {
            BookParticipant[] bookParticipants = new[] {new BookParticipant {FirstName = "Joe", LastName = "Rattz",
                                                        ParticipantType = ParticipantTypes.Author},
                                                        new BookParticipant {FirstName = "Ewan", LastName = "Buckingham",
                                                        ParticipantType = ParticipantTypes.Editor}
                                                        };
            XElement xBookParticipants =
            new XElement("BookParticipants",
                         bookParticipants.Select(p =>
                    new XElement("BookParticipant",
                    new XAttribute("type", p.ParticipantType),
                    new XElement("FirstName", p.FirstName),
                    new XElement("LastName", p.LastName))));
    
    
            Console.WriteLine(xBookParticipants);
        }
    
        //-- Obtaining Elements Without Reaching
        private static void WithoutReaching()
        {
            XDocument xDocument = new XDocument(new XElement("BookParticipants",
                                                new XElement("BookParticipant",
                                                new XAttribute("type", "Author"),
                                                new XElement("FirstName", "Joe"),
                                                new XElement("LastName", "Rattz")),
                                                new XElement("BookParticipant",
                                                new XAttribute("type", "Editor"),
                                                new XElement("FirstName", "Ewan"),
                                                new XElement("LastName", "Buckingham"))));
    
            //-- Simple Descendants
            IEnumerable elements = xDocument.Descendants("BookParticipant");
    
    
            foreach (XElement element in elements)
            {
                Console.WriteLine("Element: {0} : value = {1}",
                element.Name, element.Value);
            }
    
    
            //-- Descendants with Where Clause
            IEnumerable elements1 = xDocument.Descendants("BookParticipant")
                                                       .Where(e => ((string)e.Element("FirstName")) == "Ewan");
            foreach (XElement element1 in elements1)
            {
                Console.WriteLine("Element: {0} : value = {1}",
                element1.Name, element1.Value);
            }
    
        }
    
    
        //-- Ancestors Prototype
        private static void Ancestors()
        {
            XDocument xDocument = new XDocument(new XElement("BookParticipants",
                                                new XElement("BookParticipant",
                                                new XAttribute("type", "Author"),
                                                new XElement("FirstName", "Joe"),
                                                new XElement("LastName", "Rattz")),
                                                new XElement("BookParticipant",
                                                new XAttribute("type", "Editor"),
                                                new XElement("FirstName", "Ewan"),
                                                new XElement("LastName", "Buckingham"))));
    
            IEnumerable elements = xDocument.Element("BookParticipants").Descendants("FirstName");
            // First, I will display the source elements.
            foreach (XElement element in elements)
            {
                Console.WriteLine("Source element: {0} : value = {1}",
                element.Name, element.Value);
            }
            // Now, I will display the ancestor elements for each source element.
            foreach (XElement element in elements.Ancestors())
            {
                Console.WriteLine("Ancestor element: {0}", element.Name);
            }
    
    
            // Now, I will display the ancestor elements for each source element.
            foreach (XElement element in elements.Ancestors("BookParticipant"))
            {
                Console.WriteLine("Ancestor element: {0}", element.Name);
            }
    
        }
    
    
        //-- AncestorsAndSelf
        private static void AncestorsAndSelf()
        {
            XDocument xDocument = new XDocument(
                new XElement("BookParticipants",
                new XElement("BookParticipant",
                new XAttribute("type", "Author"),
                new XElement("FirstName", "Joe"),
                new XElement("LastName", "Rattz")),
                new XElement("BookParticipant",
                new XAttribute("type", "Editor"),
                new XElement("FirstName", "Ewan"),
                new XElement("LastName", "Buckingham"))));
            IEnumerable elements =
            xDocument.Element("BookParticipants").Descendants("FirstName");
            // First, I will display the source elements.
            foreach (XElement element in elements)
            {
                Console.WriteLine("Source element: {0} : value = {1}",
                element.Name, element.Value);
            }
            // Now, I will display the ancestor elements for each source element.
            foreach (XElement element in elements.AncestorsAndSelf())
            {
                Console.WriteLine("Ancestor element: {0}", element.Name);
            }
    
    
            // Now, I will display the ancestor elements for each source element.
            foreach (XElement element in elements.AncestorsAndSelf("BookParticipant"))
            {
                Console.WriteLine("Ancestor element: {0}", element.Name);
            }
    
        }
    
    
        //-- Sort Smaple
    
        private static void SortSample()
        {
            XElement root = XElement.Load("Data.xml");
            IEnumerable prices =
                from el in root.Elements("Data")
                let price = (decimal)el.Element("Price")
                orderby price
                select price;
            foreach (decimal el in prices)
                Console.WriteLine(el);
        }
    
        //-- Find an Element with a Specific Child 
        private static void FindElementwithSpecificChild()
        {
            XElement root = XElement.Load("data.xml");
            IEnumerable tests =
                from el in root.Elements("Data")
                where (int)el.Element("Quantity") > 3
                select el;
            foreach (XElement el in tests)
                Console.WriteLine((string)el.Attribute("TestId");
        }
    }
    

    }

    http://msdn.microsoft.com/en-us/library/bb387053.aspx

    7.25--> A 3 24.50 B 1 89.99 A 5 4.95 A 3 66.00 B 10 .99 A 15 29.00 B 8 6.99

提交回复
热议问题