【问题标题】:Creating Xml Dynamically From Object从对象动态创建 XML
【发布时间】:2015-12-08 05:49:37
【问题描述】:

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

<person>
    <personaldata>
        <name>gopi</name>
        <lastname>ch</lastname>
    </personaladata>
    <Educationaladata>
        <Graduation>b.tech</graduation>
        <designation>Engineer</designation>
    </educationaldata>
</person>

person 类有姓名、姓氏、职称、毕业和属性

我试过了

public string CreateXmlObject(Person objPerson)    
{
    var objXmlDocument = new XmlDocument();
    var objXpath = objXmlDocument.CreateNavigator();
    var objXmlSeialiser = new XmlSerializer(objPerson.GetType());
    using (var xs = objXpath.AppendChild())
    {
        objXmlSeialiser.Serialize(xs, objPerson);
    }
    return objXmlDocument.OuterXml;
}

我的问题是我必须从 Xml 读取特定数据并将特定数据更新到 Xml 。我想在更新时只阅读Personaldata,更新应该只适用于Personaldata而不是Otherdata

【问题讨论】:

  • 使用XDocument 加载xml,然后使用XDocuments Descendent 方法访问personaldata。
  • 另外,发布的xml无效。

标签: c# asp.net xml serialization


【解决方案1】:

试试 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)
                })
            });

        }
    }
}
​

【讨论】:

    【解决方案2】:

    您的所有 XML 中的第一个无效,所有节点都应匹配它们的结束标记。考虑到您的 person 类看起来像这样:-

    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();
    

    【讨论】:

    • 这也是一种方法,但是文件操作会影响性能但是谢谢您的回应
    • @Gopikrishnach - 在那种情况下,我没有很好地理解你的问题。我以为您想从 XML 中检索数据,但您似乎想创建一个 XML 文件?
    【解决方案3】:

    sSomething like -

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

    【讨论】:

    • 感谢您的回复
    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多