我创建了一个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?
}
}
答案 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);
}