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.
  } 
}

属性を持つノードの属性部分のみが必要な場合は、その属性が必要であることを指定してXPath クエリidを制限し、次のように選択できます。

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

このクエリで返される各ノードは ID 属性ノードになるため、 を使用してループ内で値を取得できますnode.Value

于 2012-12-27T16:03:33.160 に答える