【发布时间】:2016-07-29 12:48:09
【问题描述】:
这是我的 XML 示例:
<Library>
<Stack>
<Book>
<Author>....</Author>
<Date>....</Date>
</Book>
<Book>
<Author>....</Author>
<Date>....</Date>
</Book>
</Stack>
<Stack>
<SectionScience>
<Book>
<Author>....</Author>
<Date>....</Date>
</Book>
</SectionScience>
<SectionHorror>
<Book>
<Author>....</Author>
<Date>....</Date>
</Book>
</SectionHorror>
<Book>
<Author>....</Author>
<Date>....</Date>
</Book>
</Stack>
</Library>
我尝试实现一种方法来恢复所有这些信息,但它不起作用:它只恢复 Stack 中的一项,我希望它恢复堆栈中的所有元素。
我得到的是这样的:
堆栈 1:第一本书;
堆栈 2:第一节
这是我的代码:
private void ConstructionInterface()
{
XElement docX = XElement.Load(Application.StartupPath + @"\Library.xml");
foreach (XElement elemColone in docX.Descendants("Stack"))
{
if (elemColone.Element("SectionHorror") != null)
CreateSectionHorror( elemColone.Element("SectionHorror"));
else if (elemColone.Element("SectionScience") != null)
CreateSectionScience( elemColone.Element("SectionScience"));
else if (elemColone.Elements("Book") != null)
CreateBook( elemColone.Element("Book"));
}
}
【问题讨论】:
-
找到一个很好的使用xpath查询xml的教程。
-
我注意到的第一件事是这不是有效的 xml(标签中不能有空格)。我注意到的第二件事是,您编写的代码对于每个
Stack标记只能执行一个操作。 -
是的,我明白,但我不知道如何实现一个不通过堆栈标签执行一项操作的算法
-
是的,
<Section Horror>是无效的 XML。你可能想要更多的东西,是的,<Section name="Horror">is invalid XML。