我正在尝试读取一些XML数据,但我收到的错误是我以前从未发现过的。任何人都可以对此有所了解吗?
错误:
屏幕名称:System.Xml.Linq.Extensions + c__Iterator5
UnityEngine.Debug:日志(对象) 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>
答案 0 :(得分: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
是什么意思。
为什么你有Width
,Height
和Name
的单独元素,每个都有一个与元素名称匹配的属性并且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
循环 - 但目前尚不清楚您实际尝试的是什么暂时不要记录调试信息。
答案 1 :(得分: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)
{
...
我希望能帮到你!!