如何使用c#从keyvalue对中获取“Value”

我想使用c#获取“名称”下可用的各种参数的“值”中提到的字符串。 这是我当前的xml如下:

          

我想在Name = SID_STAGE 'Value'下获取'101198' 。 请建议我如何执行它。

您可以使用LINQ to XML解析参数字典(这是存储键值对的自然方式):

 var xdoc = XDocument.Load(path_to_xml); var parameters = xdoc.Descendants("Parameter") .ToDictionary(p => (string)p.Attribute("Name"), p => (string)p.Attribute("Value")); var stage = parameters["SID_STAGE"]; 

请记住,您应该在获取参数之前检查参数是否存在于字典中(如果参数不可能在您的xml中):

 if (parameters.ContainsKey("SID_STAGE")) // get parameter value 

同样使用XPath,您可以使查询更具体(如果某个地方可能是另一个参数元素):

 var xpath = "DrWatson/Sets/Set/APIParameters/Parameter"; var parameters = xdoc.XPathSelectElements(xpath) .ToDictionary(p => (string)p.Attribute("Name"), p => (string)p.Attribute("Value")); 
 var result = XElement.Parse(xmlString) .Descendants("Parameter") .First(node => (string)node.Attribute("Name") == "SID_STAGE") .Attribute("Value"); Console.WriteLine(result.Value); //prints 101198 

将抛出此元素的exception,此属性不存在。 如果您想要其他行为,请考虑使用FirstOrDefault

使用LINQ to XML查询:

 var xml = XDocument.Load("path..."); var foo = (from n in xml.Descendants("APIParameters") where n.Element("Parameter").Attribute("Name").Value == "SID_STAGE" select n.Element("Parameter").Attribute("Value").Value).FirstOrDefault(); 

得到:

101198

 using System; using System.Xml.Linq; using System.Web; namespace YourProjectName { public static class XmlFileRetrieve { public static string GetParameterValue(string name) { try { string path = HttpContext.Current.Server.MapPath("~/YourFolderName/YourXmlFileName.xml"); XDocument doc = XDocument.Load(path); if (!(doc == null)) { var parameter = (from el in doc.Root.Elements("Parameter") where (string)el.Attribute("Name") == name select (string)el.Attribute("value")).Select(keyvalue => new { name = keyvalue }).Single(); ; return parameter.name; } return ""; } catch (Exception e) {string error=e.Message;return ""; } } } }