[英]Construct a list of wpf Hyperlink elements from an XML source file using Linq
我有一个如下的xml文件:
<Links>
<Link>
<Text>Google</Text>
<Uri>http://www.google.com</Uri>
</Link>
<Link>
<Text>Yahoo</Text>
<Uri>http://www.yahoo.co.uk</Uri>
</Link>
</Links>
从中,我想构建一堆包含以下内容的超链接元素
显然,有很多解决方法,从历史上看,我可能会做这样的事情:
List<ACMEXmlNode> nodes = ACMEXmlParser.GetNodes("Link", targetDoc);
List<Hyperlink>;
foreach (var node in nodes) {
var currentLink = new Hyperlink();
currentLink.Uri = node.ChildNode("Uri").Value;
// Can't work out how to do the below line in a linq statement
currentLink.ContentStart.InsertTextInRun(node.ChildNode("Text").Value);
currentLink.RequestNavigate += this.DoBrowserNavigate;
}
但是,我也在尝试学习Linq,这似乎应该是它的典型用例。 谁能帮助我完成与此类似的事情? 到目前为止,我有:
_Links = new List<Hyperlink>(
from linkElement in oLinksConfig.Descendants("Links")
select new Hyperlink
{
NavigateUri = new System.Uri(linkElement.Element("Uri").Value ),
// Fails...
ContentStart.InsertTextInRun(linkElement.Element("Text").Value)
}
).ToList();
这不起作用。 如果有人可以告诉我如何修复它,我将不胜感激。
您的问题不在于LINQ本身,而在于您选择的LINQ语法以及您有一个陈述的事实:
ContentStart.InsertTextInRun(linkElement.Element("Text").Value)
在对象初始化程序块中。
而是使用类似以下内容的东西:
var links = oLinksConfig
.Descendants("Links")
.Select(
linkElement =>
{
var link = new HyperLink { /* your initializations of properties with setters */ };
//statements are after you have an instance of the class
link.ContentStart.InsertTextInRun(linkElement.Element("Text").Value;
return link;
})
.ToList();
您可以尝试以下方法:
_Links = nodes.Select(node => {
var currentLink = new Hyperlink();
currentLink.NavigateUri = new Uri(node.Element("Uri").Value);
currentLink.ContentStart
.InsertTextInRun(node.Element("Text").Value);
currentLink.RequestNavigate += this.DoBrowserNavigate;
return currentLink;
}).ToList();
如果您希望输入只是纯XML文件,请尝试以下操作:
_Links = oLinksConfig.Descendants("Link")
.Select(link => {
var currentLink = new Hyperlink();
currentLink.NavigateUri = new Uri(link.Element("Uri").Value);
currentLink.ContentStart
.InsertTextInRun(link.Element("Text").Value);
currentLink.RequestNavigate += this.DoBrowserNavigate;
return currentLink;
}).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.