从xml中获取一个值的更简单方法
本文关键字:一个 更简单 方法 xml 获取 | 更新日期: 2023-09-27 18:02:59
是否有更简单的方法从xml
中的一个节点获得InnerText
?
目前,我使用以下代码来获取值:
var xml = new XmlDocument();
xml.LoadXml(callback); //callback
string txt = xml.FirstChild.FirstChild.FirstChild.LastChild.InnerText;
我想知道是否有任何方法可以在不加载整个XmlDocument
的情况下获得值。我只需要访问这一个节点和值。
提前感谢!
XML示例: (TRACK
节点最多出现80次,这里出现13次)
<RESPONSES>
<RESPONSE STATUS="OK">
<ALBUM>
<ID>some_long_id_123456789123456789</ID>
<ARTIST>some_artist</ARTIST>
<TITLE>some_album</TITLE>
<PKG_LANG>ENG</PKG_LANG>
<DATE>1234</DATE>
<GENRE NUM="123456" ID="654321">some_string</GENRE>
<TRACK_COUNT>13</TRACK_COUNT>
<TRACK>
<TRACK_NUM>1</TRACK_NUM>
<ID>some_id_123456789</ID>
<TITLE>some_title</TITLE>
</TRACK>
...
<TRACK>
<TRACK_NUM>13</TRACK_NUM>
<ID>some_id_123456789_13</ID>
<TITLE>some_title_13</TITLE>
</TRACK>
<URL TYPE="IMAGE" SIZE="MEDIUM" WIDTH="123456" HEIGHT="123456">the_url_i_wanna_access</URL>
</ALBUM>
</RESPONSE>
</RESPONSES>
使用LINQ到XML的解决方案可以像这样简单:
var doc = XDocument.Parse(xml);
var url = (string)doc.Descendants("URL").Single();
这比你已经拥有的XmlDocument
API代码更具可读性。
如果您关心性能(我不确定这个XML是否大到足以保证这一点),您可以直接使用XmlReader
来避免将所有XML加载到DOM中只是为了读取一段文本:
string url;
using (var sr = new StringReader(xml))
using (var reader = XmlReader.Create(sr))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element && reader.Name == "URL")
{
url = reader.ReadElementString();
break;
}
}
}