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