2012-01-24 57 views
0

我有以下XML文件給佈局的想法,導出XML到CSV行

<weather> 
<current_conditions> 
<condition data="Mostly Cloudy" /> 
<temp_f data="48" /> 
<temp_c data="9" /> 
<humidity data="Humidity: 71%" /> 
<icon data="/ig/images/weather/mostly_cloudy.gif" /> 
<wind_condition data="Wind: W at 17 mph" /> 
</current_conditions> 
<forecast_conditions> 
<day_of_week data="Sun" /> 
<low data="34" /> 
<high data="48" /> 
<icon data="/ig/images/weather/mostly_sunny.gif" /> 
<condition data="Partly Sunny" /> 
</forecast_conditions> 
<forecast_conditions> 
<day_of_week data="Mon" /> 
<low data="32" /> 
<high data="45" /> 
<icon data="/ig/images/weather/sunny.gif" /> 
<condition data="Clear" /> 
</forecast_conditions> 

我學習C#和想利用行導出爲CSV一週的每一天, 哪裏一天中的信息不可用,我需要在csv行中不顯示任何數據。 我明白最簡單的解決方案,我正在學習:)

+0

我可以將數據轉換爲字符串。 – dave2012

+0

string day =「Tue」; string path =「weather/forecast_conditions [day_of_week/@ data ='」+ day +「'/ condition」; string towrite = doc.XPathSelectElement(path).Attribute(「data」)。Value; – dave2012

+0

我建議編輯您的帖子,並將您嘗試的內容放入您的問題中!代碼越多越好! –

回答

1

我假設你要忽略當前條件節點,因爲它並沒有多大意義,我有一個CSV文件,其中列別t全部匹配相同的數據。爲了將所有預測信息轉換爲csv,您可以使用:

XDocument doc = XDocument.Parse(...);  
StringBuilder sb = new StringBuilder(1000); 
foreach (XElement node in doc.Descendants("forecast_conditions")) 
{ 
    foreach(XElement innerNode in node.Elements()) 
    { 
     sb.AppendFormat("{0},", innerNode.Attribute("data").Value); 
    } 
    //Remove trailing comma 
    sb.Remove(sb.Length - 1, 1); 
    sb.AppendLine(); 
} 
File.WriteAllText(@"c:\temp.csv", sb.ToString()); 
+0

這是作品謝謝,我如何排除一個元素,例如圖標數據? – dave2012

+0

另外我不明白什麼是「1000」之後做的stringbuilder?謝謝 – dave2012

+0

在innerNode對象上使用if語句,其中一個屬性將包含節點的名稱。屬性名稱最有可能名稱,雖然我不是100%確定。 –