如何在C#中读取XML属性?

时间:2009-11-01 12:41:58

标签: c# xml

我有几个XML文件,我希望从中读取属性。我的主要目标是将语法突出显示应用于富文本框。

例如,在我的一个XML文档中,我有:<Keyword name="using">[..]所有文件都具有相同的元素:Keyword

那么,我如何获取属性name的值并将它们放在每个XML文件的字符串集合中。

我正在使用Visual C#2008。

6 个答案:

答案 0 :(得分:4)

其他答案将完成这项工作 - 但语法突出显示东西几个xml文件你说你让我认为你需要更快的东西,为什么不使用精益和平均XmlReader

private string[] getNames(string fileName)
{

  XmlReader xmlReader = XmlReader.Create(fileName);
  List<string> names = new List<string>(); 

  while (xmlReader.Read())
  {
   //keep reading until we see your element
   if (xmlReader.Name.Equals("Keyword") && (xmlReader.NodeType == XmlNodeType.Element))
   {
     // get attribute from the Xml element here
     string name = xmlReader.GetAttribute("name");
     // --> now **add to collection** - or whatever
     names.Add(name);
   }
  }

  return names.ToArray();
}

另一个好的选择是XPathNavigator类 - 它比XmlDoc快,你可以使用XPath。

此外,我建议您尝试使用这种方法 IFF ,然后尝试使用您对性能不满意的简单选项。

答案 1 :(得分:3)

您可以使用XPath获取所有元素,然后使用LINQ查询获取您找到的所有名称atttributes的值:

 XDocument doc = yourDocument;
 var nodes = from element in doc.XPathSelectElements("//Keyword")
             let att = element.Attribute("name")
             where att != null
             select att.Value;
 string[] names = nodes.ToArray();

//关键字XPath表达式表示“文档中的所有元素,名为”关键字“。

编辑:刚看到您只想要名为Keyword的元素。更新了代码示例。

答案 2 :(得分:3)

和其他人一样,我建议使用LINQ to XML - 但我认为这里不需要使用XPath。这是一个返回文件中所有关键字名称的简单方法:

static IEnumerable<string> GetKeywordNames(string file)
{
    return XDocument.Load(file)
                    .Descendants("Keyword")
                    .Attributes("name")
                    .Select(attr => attr.Value);
}

很好并且声明:)

请注意,如果您想要多次使用结果,则应在其上调用ToList()ToArray(),否则每次都会重新加载该文件。当然,您可以通过将相关调用添加到方法调用链的末尾来更改方法以返回List<string> or string[],例如。

static List<string> GetKeywordNames(string file)
{
    return XDocument.Load(file)
                    .Descendants("Keyword")
                    .Attributes("name")
                    .Select(attr => attr.Value)
                    .ToList();
}

另请注意,此只是为您提供了名称 - 我希望您能够获得元素的其他详细信息,在这种情况下,您可能需要稍微不同的内容。如果结果你需要更多,请告诉我们。

答案 3 :(得分:0)

您可以使用LINQ to XML。

示例:

var xmlFile = XDocument.Load(someFile);
var query = from item in xmlFile.Descendants("childobject")
            where !String.IsNullOrEmpty(item.Attribute("using")
            select new 
            {
                AttributeValue = item.Attribute("using").Value
            };

答案 4 :(得分:0)

您可能想要使用XPath。 //Keyword/@name应该会为您提供所有关键字名称。

以下是一个很好的介绍:.Net and XML XPath Queries

答案 5 :(得分:0)

**<Countries>
  <Country name ="ANDORRA">
    <state>Andorra (general)</state>
    <state>Andorra</state>
  </Country>
  <Country name ="United Arab Emirates">
    <state>Abu Z¸aby</state>
    <state>Umm al Qaywayn</state>
  </Country>**



 public void datass(string file)
  {

            string file = HttpContext.Current.Server.MapPath("~/App_Data/CS.xml");
                XmlDocument doc = new XmlDocument();
                if (System.IO.File.Exists(file))
                {
                    //Load the XML File
                    doc.Load(file);

                }


                //Get the root element
                XmlElement root = doc.DocumentElement;
                XmlNodeList subroot = root.SelectNodes("Country");

                for (int i = 0; i < subroot.Count; i++)     
                {

                    XmlNode elem = subroot.Item(i);
                    string attrVal = elem.Attributes["name"].Value;
                    Response.Write(attrVal);
                    XmlNodeList sub = elem.SelectNodes("state");
                    for (int j = 0; j < sub.Count; j++)
                    {
                        XmlNode elem1 = sub.Item(j);
                        Response.Write(elem1.InnerText);

                    }
                }

    }