使用C#解析XML,获取属性值

时间:2014-12-17 09:41:45

标签: c# xml xmlnode

我有以下(简化的)记事本文件,据我所知,它是XML文本:

<?xml version="1.0" encoding="utf-8"?>
  <appSettings>
        <add key="Active_01" value="1">
        </add>
  </appSettings>

我正在尝试使用C#解析它。

到目前为止,我有以下内容:

public class RFIDScanner
{
    public void GetScannerConfigFile()
    {
        string File = ConfigurationManager.AppSettings["RFIDScannerConfiguration"];

        XmlDocument doc = new XmlDocument();
        doc.Load(File);

        XmlNode node = doc.DocumentElement.SelectSingleNode("/appSettings");

        String nodename = node.Name;

    }
}

到目前为止,我知道这一切都是正确的,因为:

nodename = appSettings

应该是这样。

我的问题是,如何检索值&#34; 1&#34;来自现场&#34; Active_01&#34;。

我现在知道节点&#34;添加&#34;是节点&#34; appSettings&#34;的子节点,并试图找出如何获取存储在其中的值。

3 个答案:

答案 0 :(得分:0)

有很多方法,一种是使用上面使用的函数来使用XPath:

var value = doc.DocumentElement.SelectSingleNode("/appSettings/add/@value");

另一种选择是使用xml serialization

您可以按如下方式定义类:

public class add
{
    [XmlAttribute]
    public string key;
    [XmlAttribute]
    public int value;
}

public class appSettings
{
    public add add;
}

然后按如下方式反序列化:

var ser = new XmlSerializer(typeof(appSettings));
var xmlReader = new XmlTextReader(new StringReader(s));
appSettings settings = (appSettings) ser.Deserialize(xmlReader);
xmlReader.Close();

然后,您可以从settings

获取值

答案 1 :(得分:0)

不确定您是否要解析&#39; 1&#39;从密钥Active_01中获取,或从值中获取1。在任何情况下,您都可以使用以下代码:

    public void GetScannerConfigFile()
    {
        string File = ConfigurationManager.AppSettings["RFIDScannerConfiguration"];

        XmlDocument doc = new XmlDocument();
        doc.Load(File);

        var yourFile = doc.DocumentElement;
        if (yourFile == null) return;

        // Here you'll get the attribute key: key = Active_01 - which can be simply parsed for getting only the "1"
        string key = yourFile.ChildNodes[0].Attributes["key"].Value;

        // Here you'll get the number "1" from the value attribute.
        string value = yourFile.ChildNodes[0].Attributes["value"].Value;
    }

答案 2 :(得分:-1)

我在我的代码中使用这种方式将值添加到xml 可能会有所帮助

var surveyTypeList = new XElement("SurveyTypes");
            foreach (var item in modelData.SurveyTypeList)
            {
                if (item.IsSelected)
                {
                    var surveyType = new XElement("SurveyType");
                    var id = new XElement("Id");
                    id.Add(item.Value);
                  //  **var i= id.Value**
                    surveyType.Add(id);
                    surveyTypeList.Add(surveyType);
                }
            }

您可以通过代码中的var i = id.Value获取值;