首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取XML Innertext

获取XML Innertext
EN

Stack Overflow用户
提问于 2012-11-16 23:34:36
回答 2查看 2.9K关注 0票数 0

我有一个这样的xml文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<KWS>
  <KW>
    <KWNAME>"make money online youtube video"</KWNAME>
    <GSC>318,000</GSC>
    <YSC>821</YSC>
    <TOP10>6</TOP10>
    <TOP100>61</TOP100>
    <SEARCH-US-C>0</SEARCH-US-C>
    <NOTE>
    </NOTE>
    <YTLINKS>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=Dh5vptODX-M</LINK>
      </YT-LINK>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=YtjvHX6VfcY</LINK>
      </YT-LINK>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=WDfJoDCdvyw</LINK>
      </YT-LINK>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=yRUEffXbokw</LINK>
      </YT-LINK>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=YYsqgs5ve78</LINK>
      </YT-LINK>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=7WaG3D-tSrs</LINK>
      </YT-LINK>
    </YTLINKS>
  </KW>
  <KW>
    <KWNAME>"linkin park video youtube"</KWNAME>
    <GSC>130,000</GSC>
    <YSC>4,300</YSC>
    <TOP10>7</TOP10>
    <TOP100>69</TOP100>
    <SEARCH-US-C>0</SEARCH-US-C>
    <NOTE>
    </NOTE>
    <YTLINKS>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=ij34hCOMiIU</LINK>
      </YT-LINK>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=mTMl5dRw8WI</LINK>
      </YT-LINK>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=b-JehygMcJ8</LINK>
      </YT-LINK>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=b2dmMxnUosc</LINK>
      </YT-LINK>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=hZ62r3Q6ohA</LINK>
      </YT-LINK>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=dREoOlTeYs4</LINK>
      </YT-LINK>
      <YT-LINK>
        <LINK>http://www.youtube.com/watch?v=42xL8MG3xfQ</LINK>
      </YT-LINK>
    </YTLINKS>
  </KW>
</KWS>

我的C#代码,用于获取YT-LINK中的每个链接

代码语言:javascript
复制
        XmlDocument xml = new XmlDocument();
        xml.Load(file);

        XmlNodeList nodes = xml.SelectNodes("//KW");

        foreach (XmlNode node in nodes)
        {
            KWDATA k = new KWDATA();

            k.KEYWORD = node.SelectSingleNode("KWNAME").InnerText;
            k.GSC = node.SelectSingleNode("GSC").InnerText;
            k.YTC = node.SelectSingleNode("YSC").InnerText;
            k.N_VIDEOS_TOP_10 = node.SelectSingleNode("TOP10").InnerText;
            k.N_VIDEOS_TOP_100 = node.SelectSingleNode("TOP100").InnerText;
            k.N_OF_KW_SEARCH_IN_GOOGLE = node.SelectSingleNode("SEARCH-US-C").InnerText;

            List<string> YT_LINKS = new List<string>();
            foreach (XmlNode node2 in node.SelectNodes("YTLINKS")) // <-- i know something is wrong here
            {
                MessageBox.Show(node2.SelectSingleNode("YT-LINK").InnerText);
                YT_LINKS.Add(node2.SelectSingleNode("YT-LINK").InnerText);
            }
            k.YTLINKS = YT_LINKS;

但我只得到每个条目的第一个链接,如下所示:

代码语言:javascript
复制
http://www.youtube.com/watch?v=Dh5vptODX-M
http://www.youtube.com/watch?v=ij34hCOMiIU

而其余的将不会被检索。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-16 23:39:14

"YTLINKS“节点是一个单独的节点,您可以先选择该节点,然后遍历其中的"YTLINK”节点的集合:

代码语言:javascript
复制
var ytlinks = node.SelectSingleNode("YTLINKS");

foreach (XmlNode node2 in ytlinks.SelectNodes("YTLINK"))
{           
    YT_LINKS.Add(node2.InnerText);
}
票数 1
EN

Stack Overflow用户

发布于 2012-11-17 01:02:52

在这里,您可以使用一些linq to --更少的代码

代码语言:javascript
复制
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;
    using System.Xml.Linq;

    namespace xmltest
    {
        public class KwData
        {
            public string  KEYWORD { get; set; }
            public List<string> Links { get; set; }
        }

        class Program
        {
            static void Main(string[] args)
            {
                XDocument xml = XDocument.Load("XMLFile1.xml");

                List<KwData> KwDataList = new List<KwData>();

                // Use linq to XML
                KwDataList = (from kwData in xml.Descendants("KW")
                    select new KwData
                    {
                        KEYWORD = kwData.Element("KWNAME").Value,
                        Links = kwData.Elements("YTLINKS").Elements("YT-LINK").Select( x => x.Value).ToList()
                    }).ToList();

            }
        }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13419669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档