从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>

从xml中获取一个值的更简单方法

使用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;
        }
    }
}