0

このコードを使用して、App_Data フォルダーから XML を読み込むことができました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Data;
using Newtonsoft.Json;
using System.Xml.Linq;
using System.Xml;
using XMLTest2.Models;

namespace XMLTest2.Controllers
{
    public class PeopleController : ApiController
    {
        public List<XMLpeople> GetAllPeople()
        {
            var path = HttpContext.Current.Server.MapPath(@"~/App_Data/XML_Test.xml");
            List<XMLpeople> people = new List<XMLpeople>();
            XMLpeople NewPerson = new XMLpeople();
            XDocument doc = XDocument.Load(path);

            foreach (XElement element in doc.Descendants("people").Descendants("person"))
            {
                NewPerson.id = element.Element("id").Value;
                NewPerson.name = element.Element("name").Value;
                NewPerson.age = element.Element("age").Value;
                NewPerson.description = element.Element("description").Value;
                people.Add(NewPerson);
            }

            return people;
        }
    }
}

これからクライアントへの安らかなサービスを作成したいと思います。これらのコードを使用して、これを数日間解析しようとしています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Data;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Newtonsoft.Json;
using System.Xml.Linq;
using System.Xml;

namespace XMLTest2.Models
{
    public class PeopleRestService
    {
        public List<XMLpeople> GetAllPeople()
        {
            string current_hostname = System.Web.HttpContext.Current.Request.Url.ToString();
            string api_url = "api/people";
            string url = current_hostname + api_url;

            WebClient proxy = new WebClient();
            using (var stream = proxy.OpenRead(url))
            {
                var response = proxy.DownloadString(url);
                XmlReader reader = XmlReader.Create(response); //I Got an error here. It says. Illegal characters in path.
                DataTable datatable = new DataTable();
                datatable.ReadXml(reader);

                List<XMLpeople> xxx = new List<XMLpeople>();

                xxx = (from DataRow row in datatable.Rows
                       select new XMLpeople
                       {
                           id = row["id"].ToString(),
                           name = row["name"].ToString(),
                           age = row["age"].ToString(),
                           description = row["description"].ToString()
                       }).ToList();
                return xxx;
        }
    }
 }
}

ヘルプやリンクは大歓迎です。ありがとうございます。念のため、Asp.net MVC Web API は初めてです。

4

1 に答える 1

0

問題は、XML 文字列を取り込まXmlReader.Create(string) ないことです! URI を受け取ります。XML を含む文字列を渡すと、間違いなく例外が発生します。

代わりに、XmlReader.Create(Stream)またはを使用しますXmlReader.Create(TextReader)。この場合、StringReader ( のサブタイプTextReader) を使用してデータをロードするのは非常に簡単です。

var response = proxy.DownloadString(url);
using (var sr = new StringReader(response)) {
  XmlReader reader = XmlReader.Create(sr);
  // ..
}

エンコーディングの違いはあるかもしれませんが、直接使用することも可能です。streamつまり、完全XmlReader reader = XmlReader.Create(stream)にスキップすることもできます。DownloadString

于 2013-10-25T02:14:02.457 に答える