2011-04-01 112 views
1

我從另一個軟件系統獲取大量數據的xml文件。 我必須用這些數據做很多工作,所以我想將這個XML數據轉換成一個特定的領域模型,這使我能夠更高效地工作。所以我需要一種機制將xml數據映射到域模型,反之亦然。 我有什麼可能,你能完成清單嗎?將XML文件轉換爲域模型

  • 的Linq過的LINQ to XSD
  • 手動映射爲XML奧德XML DOM
  • 數據集(讀/寫XML)!?
  • ...?

謝謝你在前進, 最好的問候:-) 勞林

編輯:簡單地說:我想要做的OR映射但不是一個DBMS我有一個XML文件;-)

+1

這是一個有用的工具,它可以幫助,雖然我不知道它到底是什麼,你需要這個xml文件做。 http://xsd2code.codeplex.com/ – pmcilreavy 2011-04-01 07:50:37

+1

Xsd2Code將分兩步工作 - 首先,您需要使用xsd.exe爲xml生成模式(假設您還沒有),然後使用Xsd2Code從模式生成域模型。 Xsd2Code有一個命令行開關,它可以將序列化/反序列化方法添加到模型類,您可以使用它來加載數據..聲明:Linq2Xml可能是一個更簡單的解決方案:) – MattDavey 2011-04-01 08:34:11

回答

3

嘗試使用Linq to Xml。您的映射器將看起來像下面的代碼。

XML:

<contacts> 
    <contact contactId="2"> 
    <firstName>Barry</firstName> 
    <lastName>Gottshall</lastName> 
    </contact> 
    <contact contactId="3"> 
    <firstName>Armando</firstName> 
    <lastName>Valdes</lastName> 
    </contact> 
</contacts> 

負載數據代碼:

XDocument loaded = XDocument.Load(@"C:\contacts.xml"); 

映射:

List<MyContact> contacts = (from c in loaded.Descendants("contact") 
    select new MyContacts() { 
           FirstName = (string)c.Element("firstName"), 
           LastName = (string)c.Element("lastName") 
          }).ToList(); 
0

假設xml模型和對象之間存在一對一的關係,您也可以實現System.Xml.Serialization.IXmlSerializable。有更多的信息在Proper way to implement IXmlSerializable?

+0

此解決方案應該是簡單案例,但我認爲它會在對象與實際表現它們的一種特定方式之間產生太多的耦合。例如。如果您改爲使用數據映射器模式,則還可以使用備用「後端」格式。這也將更清楚地處理從一個版本的已保存數據遷移到新版本(儘管我想這也可以通過覆蓋Serialize和Deserialize來完成)。 – 2013-10-19 06:18:50

0

XML序列化/反序列化似乎是一個好主意,如果你有一個域對象可用。

更多信息有關XmlSerializer Class

+0

正如我在對不同答案的評論中提到的那樣,我懷疑這個解決方案與Data Mapper模式相比耦合度太高。 – 2013-10-19 06:19:39