【发布时间】:2020-08-07 15:22:42
【问题描述】:
我一直在尝试阅读这个 XML 文件,但是与我在网上看到的示例相比,它很复杂/嵌套了很多。我尝试过使用 LINQ 和 XMLReader,但没有成功。
LINQ 会读取每个 OrderScreen;然而,当涉及到每个 OrderScreen 的 Cell 时,它会将所有可能的 Cell 加载到每个 OrderScreen 中,即使该 Cell 不属于该 OrderScreen。我理解它为什么这样做,但我对 LINQ 还很陌生,而且我看到的大多数示例都没有这么复杂,也没有真正涵盖这一点。
XMLReader 工作得很好,但它在完成读取一个 OrderScreen 后不会继续读取下一个 Cell,它只是读取下一个 OrderScreen 的第一个 Cell,然后假定它位于文档的末尾。我没有包含该代码,因为我看到人们在所有搜索中都使用 LINQ over XMLReader。
XML 在下面,之后是最新的 LINQ 代码
非常感谢任何帮助!
<Screens>
<DeleteScreens></DeleteScreens>
<NewScreens>
<OrderScreen>
<ScreenNumber></ScreenNumber>
<Title></Title>
<NumberOfColumns></NumberOfColumns>
<OptionScreen></OptionScreen>
<ShowQuantityButtons></ShowQuantityButtons>
<PrepSequenceScreen></PrepSequenceScreen>
<Cell>
<CellNumber></CellNumber>
<CellName></CellName>
<InventoryNumber></InventoryNumber>
...more Cell elements..
<OptionGroup>
<Type></Type>
<ScreenNumber></ScreenNumber>
<Cells></Cells>
</OptionGroup>
...more OptionGroups...
</Cell>
...more Cells...
</OrderScreen>
...more OrderScreens...
</NewScreens>
<UpdateMenus>
<Menu>
<MenuNumber></MenuNumber>
<MenuTitle></MenuTitle>
...more Menu elements...
</Menu>
...more Menus...
</UpdateMenus>
<Screens>
XDocument xdoc;
xdoc = XDocument.Load(@"C:\Users\Kwagstaff\Desktop\PMM_3.0\PMM_3.0\XML\Screens.xml");
var ORDERSCREENS = from a in xdoc.Descendants("OrderScreen")
select new
{
ScreenNumber = a.Element("ScreenNumber").Value,
Title = a.Element("Title").Value,
NumberOfColumns = a.Element("NumberOfColumns").Value,
OptionScreen = a.Element("OptionScreen").Value,
ShowQuantityButtons = a.Element("ShowQuantityButtons").Value,
PrepSequenceScreen = a.Element("PrepSequenceScreen").Value,
Cell = from b in xdoc.Descendants("Cell")
select new
{
CellNumber = b.Element("CellNumber"),
}
};
【问题讨论】:
-
从:Cell = from b in xdoc.Descendants("Cell") 到:Cell = from b in a.Descendants("Cell")