显示在线源的XML信息

时间:2013-12-06 06:14:32

标签: c# xml

我正在尝试在c#中创建一个Web服务,以显示从在线源提取的xml信息。该网站是“http://www.omdbapi.com/?s=”movieititle“& r = XML”,我在其中插入了Underworld作为标题搜索。从网站上回来的是:

此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。

<root response="True">
  <Movie Title="Underworld" Year="2003" imdbID="tt0320691" Type="movie"/>
  <Movie Title="Underworld: Evolution" Year="2006" imdbID="tt0401855" Type="movie"/>
  <Movie Title="Underworld: Rise of the Lycans" Year="2009" imdbID="tt0834001" Type="movie"/>
  <Movie Title="Underworld: Awakening" Year="2012" imdbID="tt1496025" Type="movie"/>
  <Movie Title="Underworld U.S.A." Year="1961" imdbID="tt0055571" Type="movie"/>
  <Movie Title="Underworld" Year="1927" imdbID="tt0018526" Type="movie"/>
  <Movie Title="Tomb Raider: Underworld" Year="2008" imdbID="tt0972844" Type="game"/>
  <Movie Title="Hercules in the Underworld" Year="1994" imdbID="tt0110019" Type="movie"/>
  <Movie Title="Underworld" Year="1996" imdbID="tt0120414" Type="movie"/>
  <Movie Title="King of the Underworld" Year="1939" imdbID="tt0031536" Type="movie"/>
</root>

我编写的用于提取信息的代码如下,但由于某种原因,它没有在文本框中显示任何内容,但我知道它正在通过迭代器,因为它显示“工作”10次,这是数字的条目。任何帮助将不胜感激。

private void button1_Click(object sender, EventArgs e)
{

    txtResults.Clear();
    HttpWebRequest myHttpWebRequest = null;
    HttpWebResponse myHttpWebResponse = null;
    XmlTextReader myXMLReader = null;
    XPathNavigator nav;
    XPathDocument docNav;

    String title = txtMovieKeywords.Text;

    String keyURL = "http://www.omdbapi.com/?s=" + title + "&r=XML";

    myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(keyURL);
    myHttpWebRequest.Method = "GET";
    myHttpWebRequest.ContentType = "text/xml; encoding='utf-8'";
    myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
    myXMLReader = new XmlTextReader(myHttpWebResponse.GetResponseStream());
    docNav = new XPathDocument(myXMLReader);
    nav = docNav.CreateNavigator();

    XPathNodeIterator NodeIter;

    NodeIter = nav.Select("//root[@response='True']/Movie");
    while (NodeIter.MoveNext())
    {
        txtResults2.Text += NodeIter.Current.Value.ToString();
        //txtResults2.Text += NodeIter.Current.SelectSingleNode("Movie[@Title]").ToString();
        txtResults2.Text += "work";

    }
}

2 个答案:

答案 0 :(得分:0)

你正在使用

txtResults2.Text += NodeIter.Current.Value.ToString();

Movie元素没有字符串值 - 您需要使用NodeIter.Current读取每个GetAttribute上的各个属性。

答案 1 :(得分:0)

NodeIter.Current.Value.ToString()是空字符串,因为Movie元素没有任何值文本。

除非,Movie元素定义如下

<Movie Title="Underworld" Year="2003" imdbID="tt0320691" Type="movie">valueText</Movie>

然后您将通过此行NodeIter.Current.Value.ToString()获得“valueText”

如果你想获得Movie元素的任何属性,你必须像这个样本一样编码

这将尝试从每个Movie元素中获取Title属性的值:

while (NodeIter.MoveNext())
{
    txtResults2.Text += NodeIter.Current.GetAttribute("Title", "");
}