-3

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

<DrWatson>
  <Sets>
    <Set>
      <APIParameters>
        <Parameter Name="SID_STAGE" Value="101198" Required="true" />
        <Parameter Name="SID_QE" Value="Test 91817" Required="true" />
      </APIParameters>
    </Set>
  </Sets>
</DrWatson>

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

4

4 回答 4

3

您可以使用 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,您可以使查询更加具体(如果某处可能是另一个 Parameter 元素):

var xpath = "DrWatson/Sets/Set/APIParameters/Parameter";
var parameters = xdoc.XPathSelectElements(xpath)
                     .ToDictionary(p => (string)p.Attribute("Name"),
                                   p => (string)p.Attribute("Value"));
于 2013-09-17T11:09:27.500 回答
3
var result = XElement.Parse(xmlString)
                     .Descendants("Parameter")
                     .First(node => (string)node.Attribute("Name") == "SID_STAGE")
                     .Attribute("Value");

Console.WriteLine(result.Value); //prints 101198

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

于 2013-09-17T11:10:09.350 回答
1

使用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

于 2013-09-17T11:12:29.043 回答
0
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 "";
            }
        }
    }
}
于 2017-06-21T17:10:20.633 回答