如何读取XML中的特定标签?

时间:2013-07-30 06:14:29

标签: c# asp.net xml

这是我的Xml文件

<?xml version="1.0" encoding="utf-8" ?>
  <Colleges>
    <College id="1" >
        <Name>Guru Kashi University</Name>
        <ShortName>GKU</ShortName>
        <Address>Talvandi Sabo</Address>
        <City>Bathinda</City>
        <Contact>09876543210</Contact>    
     </College>

     <College id="2" >
        <Name>Shaheed Udham Singh</Name>
        <ShortName>SUS</ShortName>
        <Address>Tangori</Address>
        <City>Mohali</City>
        <Contact>01234567890</Contact>    
     </College>
  </Colleges>

我想阅读所有属性College tag其中id = 1

但我不知道如何阅读

3 个答案:

答案 0 :(得分:1)

您可以使用XDocumentLinq

XDocument xDoc1 = XDocument.Parse(@" <Colleges> <College id=""1"" > <Name>Guru Kashi University</Name> <ShortName>GKU</ShortName> <Address>Talvandi Sabo</Address> <City>Bathinda</City> <Contact>09876543210</Contact> </College>  <College id=""2"" > <Name>Shaheed Udham Singh</Name> <ShortName>SUS</ShortName> <Address>Tangori</Address> <City>Mohali</City> <Contact>01234567890</Contact> </College> </Colleges>");

var result = xDoc1.Root.Elements("College")
                                          .Where(x => x.FirstAttribute.Name == "id" && 
                                                     x.FirstAttribute.Value == "1");

答案 1 :(得分:1)

您可以非常轻松地使用LINQ to XML执行此操作。假设您在字符串上面有XML:

// Use XDocument.Load(fileName) if the XML is in file.
XDocument xDoc = XDocument.Parse(xml); // xml is the XML string

var query = from x in xDoc.Descendants("College")
            where x.Attribute("id").Value == "1"
            select x.Elements;

上面的内容将为您提供College元素下ID为1的所有元素的集合。

或者,您可以创建匿名类型:

var query = (from x in xDoc.Descendants("College")
             where x.Attribute("id").Value == "1"
             select new {
                 Name = x.Element("Name").Value,
                 ShortName = x.Element("ShortName").Value,
                 Address = x.Element("Address").Value,
                 City = x.Element("City").Value,
                 Contact = x.Element("Contact").Value
             }).SingleOrDefault();

在这种情况下,我使用SingleOrDefault获取唯一值(如果没有找到则没有值);如果你可以有多个“id”= 1然后删除SingelOrDefault,你将拥有一个匿名类型的集合。

然后您可以访问以下数据:

query.Name
query.ShortName

答案 2 :(得分:1)

XmlDocument Doc = new XmlDocument();
Doc.Load(HttpContext.Current.Server.MapPath("Your xml file path"));

XmlNodeList nodeList = MenuListNode.SelectNodes("//College");
string value= "";

if(nodeList.Attributes("id").Value.Equals("1"))
{
    value = nodeList.Attributes("id").Value.ToString() + "|";
    foreach (XmlNode MenuNode in MenuListNode.ChildNodes)
    {
        value = value + MenuNode.InnerText.ToString() + "|";
    }
}

现在该值将给出节点学院的子节点的文本,其id属性为1,并用管道分隔。请告知是否有帮助