我有一个示例xml
<Lookup>
<Controller Name="Activity1" >
<action Name="Editactivity1" appgroup="Something" productcode="SomethingElse"/>
</Controller>
<Controller Name="Activity2">
<action Name="Editactivity2" appgroup="Something1" productcode="SomethingElse2"/>
</Controller>
</Lookup>
我将控制器名称和操作名称存储在变量中。
var cntName;
var actName;
根据这些值,我必须查找此Xml并获取相应的appgroup
和productcode
值。
注意:cntName
的示例值为Activity1
或Activity2
或ActivityN
。
actName
的示例值为EditActivity1
或EditActivity2
或EditActivityN
。
所以基于这些值我必须查找xml,希望我对我的问题陈述很清楚。
我正在使用传统的xmldatadocument读取我的xml,如何将其更改为LINQ?以下示例。
XmlDocument xmlDocAppMod = new XmlDocument();
strFileName = System.Configuration.ConfigurationManager.AppSettings["AppModOptListPath"].ToString();
strFileLocation = System.Web.HttpContext.Current.Server.MapPath("~/" + strFileName);
xmlDocAppMod.Load(strFileLocation);
谢谢, 阿达什讷
答案 0 :(得分:0)
基本上,您有几种选择:
从磁盘加载文档并创建一个xPath表达式来评估它:
var doc = new XmlDocument();
doc.Load(fileName);
var node = doc.SelectSingleNode(
string.Format("/Lookup/Controller[@Name='{0}']/action[@Name='{1}']", cntName, actName));
if (node != null)
{
var appGroup = node.Attributes["appgroup"].Value;
var productcode = node.Attributes["productcode"].Value;
}
另一种选择可能是使用XDocument:
var doc = XDocument.Load("");
var action = doc.Descendants("Controller")
.Where(c =>
{
var controllerName = c.Attribute("Name");
return controllerName != null && controllerName.Value.Equals(cntName);
})
.FirstOrDefault()
.Elements("action")
.Where(a =>
{
var controllerName = a.Attribute("Name");
return controllerName != null && controllerName.Value.Equals(actName);
})
.FirstOrDefault();
var appGroup = action.Attribute("appgroup").Value;
var productCode = action.Attribute("productcode").Value;
<强>更新强>
当然,您也可以将xPath与Linq-to-XML一起使用:
var doc = XDocument.Load("");
var action = (XElement) doc.XPathEvaluate(string.Format("/Lookup/Controller[@Name='{0}']/action[@Name='{1}']", cntName, actName));
var appGroup = action.Attribute("appgroup").Value;
var productCode = action.Attribute("productcode").Value;