2017-06-29 30 views
0

我有一個複雜的XML文件,我想從不同的Set標記中檢索不同的值。最後,我需要將這些值傳遞給一個CSV文件。定義XPathSelectElement時發生錯誤c#

請參閱xml file format

我試圖檢索

<szItemID>3268750004533</szItemID> from the first set 
<lMerchandiseStructureID>40</lMerchandiseStructureID> from the second set 
<szDesc>PHG VIANDE SECHEE DE</szDesc> from the third set 
<dPackingUnitPriceAmount>75</dPackingUnitPriceAmount> from the fourth tag 

我試圖通過下面的代碼檢索第一個元素的值,但得到一個錯誤

的NullReferenceException未處理 未將對象引用設置爲對象的實例

代碼

XmlDocument document = new XmlDocument(); 
     document.Load(@"D:\\xml_1.xml"); 

     string myXmlString = document.OuterXml.ToString(); 

     XElement xml = XElement.Parse(myXmlString); 

     Console.WriteLine(string.Format("{0}",xml.XPathSelectElement("/UpdateDB/Transaction/Insert/Set/szItemID").Value)); 

請幫

StringBuilder dataToBeWritten = new StringBuilder(); 


     var doc = XDocument.Load(@"D:\xml_2.xml"); 

     foreach (var trans in doc.Descendants("Transaction")) 

     { 
      var val3 = (string)doc.Descendants("Set").Elements("szItemID").First(); 
      var val4 = (string)doc.Descendants("Set").Elements("lMerchandiseStructureID").First(); 
      var val5 = (string)doc.Descendants("Set").Elements("szName").First(); 
      var val6 = (string)doc.Descendants("Set").Elements("lRetailStoreID").First(); 
      var val7 = (string)doc.Descendants("Set").Elements("bIsContract").First(); 

      dataToBeWritten.Append(val3); 
      dataToBeWritten.Append(","); 
      dataToBeWritten.Append(val4); 
      dataToBeWritten.Append(","); 
      dataToBeWritten.Append(val5); 
      dataToBeWritten.Append(","); 
      dataToBeWritten.Append(val6); 
      dataToBeWritten.Append(","); 
      dataToBeWritten.Append(val7); 
      dataToBeWritten.Append(","); 
      dataToBeWritten.Append(Environment.NewLine); 

     } 


     Console.WriteLine(dataToBeWritten.ToString()); 

     Console.ReadLine(); 


     var testpath = @"D:\\Lutchmee2.csv"; 

     File.WriteAllText(testpath, dataToBeWritten.ToString()); 
+0

的【什麼是一個NullReferenceException可能的複製,以及如何做我修復它?](https://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – Fabiano

回答

0

XElementUpdateDB,所以從這種情況下,沒有孩子UpdateDB。你必須到您的查詢修改爲:

/Transaction/Insert/Set/szItemID 

這就是說,目前還不清楚爲什麼你加載文檔到DOM,將其轉換爲字符串,比解析到XElement。只需加載到一個XDocument和使用您的原始查詢:

var doc = XDocument.Load(@"D:\xml_1.xml"); 
var val = (string) doc.XPathSelectElement("/UpdateDB/Transaction/Insert/Set/szItemID"); 

或者更好的是,使用LINQ到XML作爲它的目的是:

var val = (string) doc.Descendants("Set").Elements("szItemID").First() 
+0

非常感謝您的答覆..這個作品,但我有另一個問題..實際上,如果我有一個XML文件與不同的交易標籤如何從每個交易標籤檢索每個元素?通常情況下,提供的例子包括一個產品的信息,我可能有文件,我有兩個產品..這是我有不同的交易標記集。注意每個交易中的節點數保持不變 – Lutch

+0

@Loody'foreach doc.Descendants中的var trans(「Transaction」)){..}'? –

+0

我已經嘗試了上面的新代碼,但所有我的記錄都是一樣的,即使我有不同的值不同的交易標記..任何想法?非常感謝 – Lutch

相關問題