2012-09-14 34 views
1

我有一個項目,我讀取從另一個系統導出的XML。該XML看起來是這樣的:使用C#讀取XML是正確的方法嗎?

<?xml version="1.0" encoding="ISO-8859-1"?><xmlimexport> 
    <companydata/> 
    <articles/> 
    <customers/> 
    <suppliers/> 
    <orders> 
     <order> 
      <atOrder> 
       <OOI_HEAD_DOCUMENT_NUMBER>12345</OOI_HEAD_DOCUMENT_NUMBER> 
       **... more rows ...**      
      </atOrder> 
      <rows> 
       <row><OOI_ROW_ARTICLE_NUMBER>12345</OOI_ROW_ARTICLE_NUMBER><OOI_ROW_ARTICLE_TEXT>SuperDuperArticleName</OOI_ROW_TEXT>**... more data...**</row> 
      </rows> 
     </order> 
    </orders> 
    <bests/> 
    <invoices/> 
    <supplierinvoices/> 
    <pricelists/> 
    <parcels/> 
</xmlimexport> 

所以我要做的就是加載路徑XML文件,然後:

XmlDocument doc = new XmlDocument(); 

// Load xml file 
doc.Load(xmlFile); 

// Read order data 
XmlNodeList orderList = doc.GetElementsByTagName("order"); 

foreach (XmlElement order in orderList) 
{ 
    try 
    { 
     // Read atOrder data (single node) 
     XmlNode atOrder = order.SelectSingleNode("atOrder"); 

     // Read article data (one or many nodes) 
     XmlNodeList articles = order.GetElementsByTagName("row"); 

     // Create a order 
     Order customerOrder = new Order(); 

然後讀取數據:

customerOrder.CUS_ID = Convert.ToInt32(atOrder.SelectSingleNode("OOI_HEAD_DOCUMENT_NUMBER").InnerText); 

但是,因爲它可以既是字符串,布爾值,日期時間,日期和INT在這些領域,我發現自己必須非常使用Convert.,這是這樣做的正確方法還是應該使用不同的方法?

回答

2
  • 還可以生成一個XSD並根據XSD的類反序列化XML(short tutorial here
  • 你可以直接讀取XML到數據集(.ReadXML)
+0

是的,但是這將使我必須重新創建XSD每次XML獲得另一個字段或行數據添加到它,這在這個項目中是不好的。 – Andreas

+0

每次XML獲取另一個字段時,都不需要重新創建XSD。只是第一次使用它來創建課程。之後,直接編輯Class.cs :) –