<GlobalNavigation>
<primarylink>
<secondarylink>
<linkid>1</linkid>
<linkName>3</linkname>
<secondary>
<leftnav>
<linkid>left1</linkid>
<linkName>linktext</linkname>
</leftnav>
</secondary>
</secondarylink>
</GlobalNavigation>
我想通过给出linkid来读取leftnav linkname。
答案 0 :(得分:6)
最简单的方法是使用LINQ to XML:
var doc = XDocument.Load(...);
string linkId = "left1";
var linkName = doc.Descendants("leftnav")
.Elements("linkid")
.Where(x => x.Value == linkId)
.Single()
.Parent.Element("linkName").Value;
换句话说:
leftnav
元素linkid
元素linkid
元素linkid
元素。linkName
元素答案 1 :(得分:1)
您可以使用xpath进行搜索。 由于xpath中的字符串连接,此解决方案易受注入攻击。
XElement source = ...
var linkId = "left1";
var linkName =
source.XPathSelectElements(@"leftnav[linkid='" + linkId + @"']/linkName")
.Select(i=>i.Value).SingleOrDefault();
我建议使用以下内容:
var linkId = "left1";
var query =
from leftNavElement in source.Descendants("leftnav")
from linkIdElement in leftNavElement.Elements("linkid")
where linkIdElement.Value == linkId
from linkNameElement in leftNavElement.Elements("linkName")
select linkNameElement.Value;
var linkName = query.SingleOrDefault();
它使用linq并处理没有找到匹配元素的情况。
如果两个解决方案都没有匹配,则linkName的值将为null。
答案 2 :(得分:1)
更简单的方法是使用XPathing。 http://msdn.microsoft.com/en-us/library/ms256086%28VS.85%29.aspx
关于xpathing的好处是它可以在.net 2.0中运行,你可以在一行中得到你想要的东西!...
xmlDoc.SelectSingleNode("secondaryLink/secondary/link[/linkid="123"]/linkname")