获取 XmlNode 的特定属性

Posted

技术标签:

【中文标题】获取 XmlNode 的特定属性【英文标题】:Get specific attribute of XmlNode 【发布时间】:2016-07-10 09:50:32 【问题描述】:

我有一个 XmlNode,它的 OuterXml 是我发布的下一个代码。我需要知道如何获取每个广告系列的名称和年龄。

XmlNode Response = client.GetNamesAndAges(xmlRequest);

<Example>
  <FromDate>12-05-2016</FromDate>
  <ToDate>25-05-2016</ToDate>
  <Campaigns>
    <Campaign>
      <Name>A</Name>
      <age>2</age>
    </Campaign>
    <Campaign>
      <Name>B</Name>
      <age>1</age>
    </Campaign>
  </Campaigns>
  <Status></Status>
</Example>

【问题讨论】:

【参考方案1】:

您可以通过SelectNodes() 使用XPath 来获取特定的节点/元素,即在这种情况下为Campaign 元素,然后从每个Campaign 打印Nameage 值:

var campaignList = Response.SelectNodes("Campaigns/Campaign");
foreach(XmlNode campaign in campaignList)

    Console.WriteLine(campaign["Name"].InnerText);
    Console.WriteLine(campaign["age"].InnerText);

顺便说一句,Nameage元素。 XML 中的 Attributes 用于引用其他内容,即 bar 是属性的名称,其值为以下 XML 元素 &lt;foo bar="baz"/&gt; 中的 baz

【讨论】:

请注意,如果特定元素中没有“姓名”或“年龄”,则会引发异常。如有必要,您可能需要将 campaign["Name"].InnerTextcampaign["age"].InnerText 包装在一个尝试安全提取信息的方法中。【参考方案2】:

使用xml linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1

    class Program
    
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        
            XDocument doc = XDocument.Load(FILENAME);

            var campaign = doc.Descendants("Campaign").Select(x => new
            
                name = (string)x.Element("Name"),
                age = (int)x.Element("age")
            ).ToList();
        
    

【讨论】:

以上是关于获取 XmlNode 的特定属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中从 XmlNode 读取属性值?

将 XElement 转换为 XmlNode

如何访问特定 XMLnode 的 innerText

如何检查多个 XMLNode 属性的空值?

按属性搜索 XmlNode

如何序列化 XMLNode 类型的属性