维基百科图片列表显示来自Wikipedia xmlapi

本文关键字:列表显示 xmlapi Wikipedia 百科 | 更新日期: 2023-09-27 18:21:24

我正试图编写一段代码,在该代码中,我从维基百科获得了第一个图像api的xml格式。现在我想通过c#解析它。但是我在运行代码时无法获取图像。这是我的密码。

namespace WikiAPIWinForm
{
     public partial class WikiForm : Form
   {
    private const string url1_Image1 = "https://en.wikipedia.org/w/api.php?action=query&titles=File:Schloss%20Neuschwanstein%202013.jpg&prop=imageinfo&iiprop=comment|url|dimensions&format=xml&iiurlwidth=300"; //show 1st image
    private const string url1_Image2 = "https://en.wikipedia.org/w/api.php?action=query&titles=File:Neuschwanstein%20castle.jpg&prop=imageinfo&iiprop=comment|url|dimensions&format=xml&iiurlwidth=300";// show another image
    private const string url1_Image3 = "https://en.wikipedia.org/w/api.php?action=query&titles=File:Hohenschwangau_-_Schloss_Neuschwanstein5.jpg&prop=imageinfo&iiprop=comment|url|dimensions&format=xml&iiurlwidth=300";// show another image
   public WikiForm()
    {
        InitializeComponent();
    }

        XDocument xmlDocument1 = XDocument.Load(url1_Image1);
        XDocument xmlDocument2 = XDocument.Load(url1_Image2);
        XDocument xmlDocument3 = XDocument.Load(url1_Image3);

        var image1 = (from page in xmlDocument1.Descendants("page")
                      select new AllImage
                      {
                          Title1 = page.Attribute("title").Value,
                          Imagerepository1 = page.Attribute("imagerepository").Value,
                          Url1 = page.Element("imageinfo").Element("ii").Attribute("thumburl").Value
                      });
        ShowImages1(image1);
        var image2 = (from page in xmlDocument2.Descendants("page")
                      select new AllImage
                      {
                          Title2 = page.Attribute("title").Value,
                          Imagerepository2 = page.Attribute("imagerepository").Value,
                          Url2 = page.Element("imageinfo").Element("ii").Attribute("thumburl").Value
                      });
        ShowImages2(image2);
        var image3 = (from page in xmlDocument3.Descendants("page")
                      select new AllImage
                      {
                          Title3 = page.Attribute("title").Value,
                          Imagerepository2 = page.Attribute("imagerepository").Value,
                          Url3 = page.Element("imageinfo").Element("ii").Attribute("thumburl").Value
                      });
        ShowImages3(image3);
    }



     private void ShowImages1(IEnumerable<AllImage> image1)
    {
        var image = image1.First();
        pictureLabel1.Text = image.Title1;
        pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox1.LoadAsync(image.Url1);// asynchronous loading
    }

    private void ShowImages2(IEnumerable<AllImage> image2)
    {
        var image = image2.First();
        pictureLabel2.Text = image.Title2;
        pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox2.LoadAsync(image.Url2);// asynchronous loading
    }
    private void ShowImages3(IEnumerable<AllImage> image3)
    {
        var image = image3.First();
        pictureLabel3.Text = image.Title3;
        pictureBox3.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox3.LoadAsync(image.Url3);// asynchronous loading
    }
 }

维基百科图片列表显示来自Wikipedia xmlapi

您需要类似的东西

private void button1_Click(object sender, EventArgs e)
{
    button1.Enabled = false; // to prevent a new download until you have finished the old one
    XDocument xmlDocument = XDocument.Load(url1_Image);
    var images = (from page in xmlDocument.Descendants("page")
                  select new AllImage
                  {
                      Title = page.Attribute("title").Value,
                      Imagerepository = page.Attribute("imagerepository").Value,
                      Url = page.Element("imageinfo").Element("ii").Attribute("url").Value
                  });
    ShowImages(images);
};
private void ShowImages(IEnumerable<AllImage> images)
{
    var image = images.First();
    label1.Text = image.Title;
    pictureBox1.LoadAsync(image.Url); // asynchronous loading
}

下载图像后,您需要使按钮可用。

void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e)
{
    button1.Enabled = true;
}

强烈建议为控件指定正常名称。例如,buttonLoadlabelTitlepictureBoxWikiImage

此外,我在XML中只看到了关于一个图像的信息。那么,IEnumerable集合是什么呢?