0

我创建了一个如下所示的 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?
  } 
} 
4

5 回答 5

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);
于 2012-12-27T11:31:36.113 回答
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();
于 2015-02-27T10:42:35.030 回答
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();
于 2012-12-27T11:32:04.050 回答
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 查询:

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

此查询返回的每个节点都是一个 ID 属性节点,因此您可以使用node.Value.

于 2012-12-27T16:03:33.160 回答
0

var xmlString = "";

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

        foreach (XmlNode node in xml.SelectNodes("//Engagement[@id]"))
        {
            Console.WriteLine(node.Attributes["id"].Value);
        }
于 2015-02-27T11:10:24.080 回答