对于我正在处理的应用程序,我必须显示 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()
,但这会产生错误。我也看过 using Nodes()
,但结果相似。
我想我可以使用 foreach 循环来访问节点,但是我不确定如何将结果放入 LINQ 查询中,以便可以返回相同的结果e.Result = query
。
正如您可能已经猜到的那样,我对 LINQ 相当陌生,因此非常感谢任何提示。