簡體   English   中英

未知的XML錯誤

[英]Unknown XML error

我正在嘗試讀取一些XML數據,但是卻遇到了從未發現過的錯誤。 誰能對此有所啟發?

錯誤:

屏幕名稱:System.Xml.Linq.Extensions + c__Iterator5

UnityEngine.Debug:Log(Object)HV_ReadSettingsFile:Update()(位於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>

那不是錯誤。 這恰好記錄了您的要求。 您已經在所有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項目的集合, HV_Screen可能要使用查詢而不是foreach循環-但目前尚不清楚您實際要執行的操作,而不僅僅是記錄調試信息。

您可以嘗試執行以下操作:

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)
        {
          ...

希望對您有幫助!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM