GetElementByTagName returns System.Xml.XmlElementList
本文关键字:XmlElementList Xml System returns GetElementByTagName | 更新日期: 2023-09-27 18:01:33
我有一个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
不太确定我做错了什么。
顾名思义,正如文档所告诉您的,该方法返回:
包含所有匹配节点列表的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();
试试这个
XDocument doc = XDocument.Load(Server.MapPath("~/PressSection.xml"));
var query = doc.Descendants("event").Elements("name").FirstOrDefault();
Console.WriteLine(query.Value);
这实际上是预期的行为。
这样做的原因是它返回符合您的条件的所有元素的列表。如果您确定总是需要第一个元素,则可以通过以下方式获取第一个元素:
name[0].ToString()
然而,您可能还想为XmlElementList添加一些空和空检查,因为它也可能是空的,这将导致您获得一个空指针异常,如果您试图从中获取一个项目。