从XML文件中获取节点的所有属性值

时间:2012-12-27 11:22:12

标签: c# .net xml

我创建了一个xml文件,如下所示

<Engagements>
    <User name ="jjjj">
        <Engagement id="1111"/>
    </User>
    <User name ="kkkk">
        <Engagement id="2222"/>
    </User>
</Engagements>

我需要从所有Engagement个节点获取所有id值。

这就是我目前所拥有的:

public static void ParseXml(XmlDocument xmlFile) 
{
  XmlNodeList nodes = xmlFile.SelectNodes("//Engagement"); 
  foreach (XmlNode node in nodes) 
  { 
    // What goes here?
  } 
} 

5 个答案:

答案 0 :(得分:7)

使用LINQ to XML:

XDocument doc = XDocument.Parse(xml);
var ids = doc.Descendants("Engagement").Attributes("id").Select(x => x.Value);

foreach (var id in ids)
    Console.WriteLine(id);

答案 1 :(得分:3)

var xmlString = "...";  // <--- your xml here
var xml = new XmlDocument();
xml.LoadXml(xmlString);
var xnList = xml.SelectNodes("/Engagements/User");
var test = "";
if (xnList != null) 
foreach (XmlNode xn in xnList)
{
    if (xn.Attributes != null)
    {
        if (xn.Attributes[0].Value == "kkkk")
        {
            if (xn.FirstChild.Attributes != null)
            {
                var xmlElement = xn.FirstChild.Attributes[0].Value;
                if (xmlElement != null)
                {
                    test = xmlElement;
                }
            }
        }
    }

}
Console.WriteLine(test);
Console.Read();

答案 2 :(得分:0)

您可以使用以下代码获取列表中的所有ID

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(yourxmlStringInput);
var engagements = xmlDoc.GetElementsByTagName("Engagement");
var ids = (from engagement in engagements 
          select engagement.Attributes["id"].Value).ToList();

答案 3 :(得分:0)

如果那些其他好的答案不适合你,可能会在你被困住的同一背景下向你显示答案:

public static void ParseXml(XmlDocument xmlFile) 
{
  XmlNodeList nodes = xmlFile.SelectNodes("//Engagement"); 
  foreach (XmlNode node in nodes) 
  { 
    string id = node.Attributes["id"].InnerText;
    // Do whatever you need to with each ID here.
  } 
}

如果您只想要具有id属性的节点的属性部分,则可以通过指定您需要该属性来限制XPath query,并选择它如下:

XmlNodeList nodes = xmlFile.SelectNodes("//Engagement[@id]/@id");

使用此查询返回的每个节点都将是一个ID属性节点,因此您可以使用node.Value获取循环中的值。

答案 4 :(得分:0)

var xmlString =&#34;&#34 ;;

        var xml = new XmlDocument();
        xml.LoadXml(xmlString);

        foreach (XmlNode node in xml.SelectNodes("//Engagement[@id]"))
        {
            Console.WriteLine(node.Attributes["id"].Value);
        }