未知XML错误

本文关键字:错误 XML 未知 | 更新日期: 2023-09-27 18:16:47

我试图在一些XML数据读取,但我得到一个错误,我从来没有发现过以前。有人能解释一下吗?

错误:

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

UnityEngine.Debug:日志(对象)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>

未知XML错误

这不是错误。这就是你想要的记录。您已经要求所有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是什么意思。

不太清楚为什么Width, HeightName有单独的元素,每个元素都有一个与元素名称匹配的属性- 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循环-但目前尚不清楚您实际上试图做的是记录调试信息。

您可以尝试:

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

希望能帮到你!!