GetElementByTagName返回System.Xml.XmlElementList

时间:2016-08-08 17:42:02

标签: c# asp.net xml

我有一个看起来像这样的XML文档

<?xml version="1.0" encoding="utf-8" ?>
<event>
  <name>Test Event</name>
  <date>07/09/1997</date>
  <description>Birthday</description>
  <blogURL></blogURL>
</event>

我想抓住这些字段并在ASP:Labels

中显示

这是我背后的代码

    protected void Page_Load(object sender, EventArgs e)
    {
        XmlDocument pressRelease = new XmlDocument();
        pressRelease.Load(Server.MapPath("~/PressSection.xml"));

        XmlNodeList name = pressRelease.GetElementsByTagName("name");
        CurrentEventName.Text = name.ToString();
    }

但这是它在标签中显示的内容

System.Xml.XmlElementList

不确定我做错了什么。

3 个答案:

答案 0 :(得分:1)

正如名称所暗示的那样,当the documentation tells you时,该方法返回:

  

包含所有匹配节点列表的XmlNodeList。如果没有节点与name匹配,则返回的集合将为空。

你需要迭代那个列表,或者只是在第一个项目中确定一个将永远在那里:

var names = pressRelease.GetElementsByTagName("name");
CurrentEventName.Text = names[0].Value;

也就是说,LINQ to XML是一个更好的API,我绝对鼓励你了解更多:

var doc = XDocument.Load(Server.MapPath("~/PressSection.xml"));
CurrentEventName.Text = (string)doc.Descendants("name").Single();

答案 1 :(得分:0)

试试这种方式

XDocument doc = XDocument.Load(Server.MapPath("~/PressSection.xml"));
var query = doc.Descendants("event").Elements("name").FirstOrDefault();

Console.WriteLine(query.Value);

答案 2 :(得分:0)

这实际上是预期的行为。

原因是它返回符合条件的所有元素的列表。如果你肯定知道你总是想要第一个元素,你总是可以得到第一个元素:

name[0].ToString()

但是,您可能还想为XmlElementList添加一些空和空检查,因为它也可能为空,如果您尝试从中获取项目,将导致您获得空指针异常。