我正在开发一个应用程序,需要从XML文件中显示数据。有一些转换正在进行,但最终结果将显示在树视图中。当用户单击节点时,我希望在列表视图中弹出详细信息。
当没有选择节点时,我基本上使用LINQ来获取我遇到的第一个项目的详细信息。
这是我的XML的简化版本:
<root>
<parent label="parent1">
<child label="child1">
<element1>data</element1>
<element2>data</element2>
...
</child>
<child label="child2">
<element1>data</element1>
<element2>data</element2>
...
</child>
</parent>
</root>
以下是用于获取它的代码(在通过XPAthSelectStatement选择已设置为树视图的父节点后):
protected void listsSource_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
XElement rootElement = XElement.Load(MapPath(TreeSource.DataFile));
rootElement = rootElement.XPathSelectElement("//parent[@label='parent1']");
XElement parentElement;
parentElement = rootElement;
var query = (from itemElement in parentElement.Descendants("child")
select new
{
varElement1 = itemElement.Element("element1").Value,
varElement2 = itemElement.Element("element2").Value,
...
}).Take(1);
e.result = Query;
}
这很有效,我可以从中读取
varElement1
和varElement2
的值。但是,当我尝试实现类似的机制来处理用户实际选择节点时,似乎遇到了障碍。我的方法是使用另一个
XPatchSelectStatement
来获取实际的节点:parentElement = rootElement.XPathSelectElement("//child[@label='" + tvwChildren.SelectedNode.Text + "']");
但是我不知道如何构建一个适当的LINQ查询来读取所有嵌套在子节点下的元素。我尝试使用
parentElement.Elements()
,但这导致了一个错误。我还尝试使用Nodes()
,但结果也类似。我想我可以使用foreach循环来访问节点,但然后我不知道如何将结果放入LINQ查询中,以便我可以返回相同的
e.Result = query
。我对LINQ相当新,正如你可能已经猜到的那样,所以任何提示都将非常感激。