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

Easier way to get just one value from xml

是否有更简单的方法从 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 to 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;
        }
    }
}