2013-06-03 27 views
0

我想讀一些XML數據,但我發現我以前從來沒有發現的錯誤。任何人都可以對此有所瞭解嗎?未知的XML錯誤

錯誤:

Screen name: System.Xml.Linq.Extensions+c__Iterator5

UnityEngine.Debug:Log(Object) HV_ReadSettingsFile:Update() (at Assets/_scripts/HV_ReadSettingsFile.cs:64)

這裏是我的代碼在XML閱讀並最終產生錯誤:

var xdoc = XDocument.Load(@"C:\\Test.xml"); 
     var screen = xdoc.Descendants("Screen"); 


     foreach (var Screen in screen) 
     { 
      HV_Screen _screen = new HV_Screen(); 
      _screen.Name = Convert.ToString(Screen.Descendants("Name").Attributes("Name")); 


      Debug.Log("Screen name: " + _screen.Name); 
     } 

我的XML表:

<Settings> 
    <Display_Settings> 
    <Screen> 
     <Name Name="Screen" /> 
     <ScreenTag Tag="Screen Tag" /> 
     <LocalPosition X="12" Y="81" Z="28" /> 
     <Width Width="54" /> 
     <Height Height="912" /> 
    </Screen> 
    <Screen> 
     <Name Name="Screen" /> 
     <ScreenTag Tag="Screen Tag" /> 
     <LocalPosition X="32" Y="21" Z="28" /> 
     <Width Width="54" /> 
     <Height Height="912" /> 
    </Screen> 
    </Display_Settings> 
</Settings> 

回答

1

這不是一個錯誤。這正在記錄你所要求的內容。你問過所有的一切Name元素Name屬性...但你要嘗試登錄該序列爲單一值。

我想你想:

var screens = xdoc.Descendants("Screen"); 
foreach (var screen in screens) 
{ 
    HV_Screen _screen = new HV_Screen(); 
    _screen.Name = (string) screen.Element("Name").Attribute("Name"); 

    Debug.Log("Screen name: " + _screen.Name); 
} 

這是現在正在尋找一個元素Screen元素一個屬性。請注意,我已經將變量名更改爲遵循普通的.NET約定,而不是_screen,因爲我不知道HV_Screen是什麼意思。

這不是真的不清楚爲什麼你已經有了獨立的元素WidthHeightName,每相匹配的元素名稱的屬性 - 和ScreenTag近這麼做。如果XML是你的控制之下,你可能會考慮兩種:

<Screen Name="Screen" Width="54" Height="912" Tag="Screen Tag"> 
    <LocalPosition X="12" Y="81" Z="28" /> 
</Screen> 

或者是:

<Screen> 
    <Name>Screen</Name> 
    <ScreenTag>Screen Tag</ScreenTag> 
    <LocalPosition X="12" Y="81" Z="28" /> 
    <Width>54</Width> 
    <Height>912</Height> 
</Screen> 

另外,如果你想建立的HV_Screen項目的集合,你可能想使用一個查詢而不是一個foreach循環 - 但目前還不清楚你現在正在嘗試做什麼,除了記錄調試信息。

0

你可以嘗試這樣做:

var xdoc = XDocument.Load(@"C:\\test.xml"); 

     List<string> lstScreen = xdoc.Descendants("Screen").Select(x => x.Element("Name").Attribute("Name").Value).ToList(); 

     foreach (string name in lstScreen) 
     { 
      ... 

我希望幫助你!