如何在没有循环c#的情况下获取属性xml

时间:2015-01-24 06:09:15

标签: c# xml xmlreader

我有像这样的xml文件

> <?xml version='1.0' ?> 
   <config> 
     <app> 
       <app version="1.1.0" />
>    </app>
   </config>

我希望从节点应用中读取属性版本 没有像这样的循环 while(reader.read())或foreach等。

由于

3 个答案:

答案 0 :(得分:1)

XmlDocument document = new XmlDocument();
document.Load("D:/source.xml");

XmlNode appVersion1 = document.SelectSingleNode("//app[@version]/@version");
XmlNode appVersion2 = document["config"]["app"]["app"].Attributes["version"];

Console.WriteLine("{0}, {1}", 
    appVersion1.Value, 
    appVersion2.Value);

答案 1 :(得分:0)

你可以这样做。

XmlDocument doc = new XmlDocument();
string str = "<config><app><app version=" + "\"1.1.0\"" + "/></app></config>";
            doc.LoadXml(str);
            var nodes = doc.GetElementsByTagName("app");
            foreach (XmlNode node in nodes)
            {
                if (node.Attributes["version"] != null)
                {
                    string version = node.Attributes["version"].Value;
                }
            }

你需要这个for循环因为你有两个同名App节点。 如果您有一个名为App的单个节点,

XmlDocument doc = new XmlDocument();
            string str = "<config><app version=" + "\"1.1.0\"" + "/></config>";
            doc.LoadXml(str);
            var node = doc.SelectSingleNode("//app");
                if (node.Attributes["version"] != null)
                {
                    string version = node.Attributes["version"].Value;
                    Console.WriteLine(version);
                }

答案 2 :(得分:0)

您可以使用linq来执行

    string stringXml= "yourXml Here";
    XElement xdoc = XElement.Parse(stringXml);

    var result= xdoc.Descendants("app").FirstOrDefault(x=> x.Attribute("version") != null).attribute("version").Value;

或:

    var result = xdoc.Descendants("app").Where(x => x.Attribute("version") != null)
                                        .Select(x => new { Version =  x.Value });