2015-12-08 159 views
1

這裏我有一個動態創建xml文件的場景,它應該是可串行化的。 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當我更新,更新應只適用於PersonaldataOtherdata

+0

負載使用'XDocument'的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'''Descendent'方法訪問'personaldata'。 –

+0

另外,張貼的xml無效。 –

回答

2

嘗試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) 
       }) 
      }); 

     } 
    } 
} 
​ 
0

sSometing喜歡 - 所有的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"; 
    }     
} 
+0

Thankyou的回覆 –

2

最前一頁無效,所有的節點應該匹配他們的結束標記。考慮到你person類看起來是這樣的: - :

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

這也是一種方法,但文件操作對性能的影響但謝謝你的迴應 –

+0

@Gopikrishnach - 在這種情況下,我沒有很好地理解你的問題。我以爲你想從XML檢索數據,但似乎你想創建一個XML文件? –