C# 从对象动态创建Xml

C# 从对象动态创建Xml,c#,asp.net,xml,serialization,C#,Asp.net,Xml,Serialization,这里我有一个动态创建xml文件的场景,它应该是可序列化的。xml类似于: <person> <personaldata> <name>gopi</name> <lastname>ch</lastname> </personaladata> <Educationaladata> <Graduation>b.tech<

这里我有一个动态创建xml文件的场景,它应该是可序列化的。xml类似于:

<person>
    <personaldata>
        <name>gopi</name>
        <lastname>ch</lastname>
    </personaladata>
    <Educationaladata>
        <Graduation>b.tech</graduation>
        <designation>Engineer</designation>
    </educationaldata>
</person>
我的问题是我必须从Xml中读取特定数据,并将特定数据更新为Xml。我只想读取
个人数据
当我更新时,更新应该只应用于
个人数据
而不是
其他数据-

var xml = XDocument.Load("xml path");
var personaldata = xml.Descendents("personaldata").FirstOrDefault();
if (data != null)
{
    foreach (var t in data.Descendants())
    {
        t.Value = "test";
    }                
}
类似于-

var xml = XDocument.Load("xml path");
var personaldata = xml.Descendents("personaldata").FirstOrDefault();
if (data != null)
{
    foreach (var t in data.Descendants())
    {
        t.Value = "test";
    }                
}

如果所有XML中的第一个无效,则所有节点都应与其结束标记匹配。考虑到你的
类看起来是这样的:-

public class Person
        {
            public string name { get; set; }
            public string lastname { get; set; }
            public string Graduation { get; set; }
            public string designation { get; set; }
        }
使用
LINQ to XML
,您可以轻松地执行此操作:-

Xdocument = XDocument.Load("XMLFilePath");
 List<Person> persons = (from person in xdoc.Descendants("person")
                         let personaldata = person.Element("personaldata")
                         let Educationaladata = person.Element("Educationaladata")
                         select new Person
                                {
                                  name = (string)personaldata.Element("name"),
                                  lastname = (string)personaldata.Element("lastname"),
                                  Graduation = (string)Educationaladata.Element("Graduation"),
                                  designation = (string)Educationaladata.Element("designation")
                                 }).ToList();
Xdocument=Xdocument.Load(“XMLFilePath”);
列表人员=(源于xdoc.后代中的人员(“人员”)
让personaldata=person.Element(“personaldata”)
让Educationaladata=person.Element(“Educationaladata”)
选择新人
{
名称=(字符串)personaldata.Element(“名称”),
lastname=(字符串)personaldata.Element(“lastname”),
毕业=(字符串)Educationaladata.Element(“毕业”),
名称=(字符串)教育数据元素(“名称”)
}).ToList();

第一个XML无效,所有节点都应与其结束标记匹配。考虑到你的
类看起来是这样的:-

public class Person
        {
            public string name { get; set; }
            public string lastname { get; set; }
            public string Graduation { get; set; }
            public string designation { get; set; }
        }
使用
LINQ to XML
,您可以轻松地执行此操作:-

Xdocument = XDocument.Load("XMLFilePath");
 List<Person> persons = (from person in xdoc.Descendants("person")
                         let personaldata = person.Element("personaldata")
                         let Educationaladata = person.Element("Educationaladata")
                         select new Person
                                {
                                  name = (string)personaldata.Element("name"),
                                  lastname = (string)personaldata.Element("lastname"),
                                  Graduation = (string)Educationaladata.Element("Graduation"),
                                  designation = (string)Educationaladata.Element("designation")
                                 }).ToList();
Xdocument=Xdocument.Load(“XMLFilePath”);
列表人员=(源于xdoc.后代中的人员(“人员”)
让personaldata=person.Element(“personaldata”)
让Educationaladata=person.Element(“Educationaladata”)
选择新人
{
名称=(字符串)personaldata.Element(“名称”),
lastname=(字符串)personaldata.Element(“lastname”),
毕业=(字符串)Educationaladata.Element(“毕业”),
名称=(字符串)教育数据元素(“名称”)
}).ToList();
试试xml linq

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string name = "gopi";
            string lastname = "ch";
            string graduation = "b.tech";
            string designation = "Engineer";

            XElement personalData = new XElement("person", new XElement[] {
                new XElement("personaldata", new XElement[] {
                    new XElement("name", name),
                    new XElement("lastname", lastname)
                }),
                new XElement("Educationadata", new XElement[] {
                    new XElement("Graduation", graduation),
                    new XElement("designation", designation)
                })
            });

        }
    }
}
​
试试xml linq

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string name = "gopi";
            string lastname = "ch";
            string graduation = "b.tech";
            string designation = "Engineer";

            XElement personalData = new XElement("person", new XElement[] {
                new XElement("personaldata", new XElement[] {
                    new XElement("name", name),
                    new XElement("lastname", lastname)
                }),
                new XElement("Educationadata", new XElement[] {
                    new XElement("Graduation", graduation),
                    new XElement("designation", designation)
                })
            });

        }
    }
}
​

使用
XDocument
加载xml,然后使用
XDocument
s
subgent
方法访问
personaldata
。此外,发布的xml无效。使用
XDocument
加载xml,然后使用
XDocument
s
subgent
方法访问
personaldata
。另外,发布的xml无效。这也是一种方法,但文件操作会影响性能,但谢谢Response@Gopikrishnach-那样的话,我不太明白你的问题。我以为您想从XML检索数据,但似乎您想创建一个XML文件?这也是一种方法,但文件操作会影响性能,谢谢Response@Gopikrishnach-那样的话,我不太明白你的问题。我以为你想从XML中检索数据,但似乎你想创建一个XML文件?谢谢你的响应谢谢你的响应