【问题标题】:Creating XML on the fly (memory) in ASP.NET and displaying in browser在 ASP.NET 中动态创建 XML(内存)并在浏览器中显示
【发布时间】:2011-10-29 20:21:26
【问题描述】:

我正在尝试创建一个 API XML,其中包含来自 MySQL 数据库的数据。我正在尝试实现以下目标。

<api xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <key>eee83d24-906b-4736-91d9-1031621b79eb</key>
    <name>API Test</name>
    <feedState>Test</feedState>
    <news href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news/"/>
    <comments href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/comments/"/>
</api>

如果我打开浏览器并输入下面的 URL,我可以看到上面的 XML

http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb

现在,如果我需要在“新闻”中查看详细信息,我现在只需将浏览器指向,

http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news 

这样做之后,我会看到类似的东西,

<news xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" state="Trial">
 <newsListItem href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news/800577419/">
   <id>800577419</id>
   <publishDate>2011-08-17</publishDate>
   <lastModifiedDate>2011-08-17</lastModifiedDate>
   <headline>Google buys Motorola</headline>
</newsListItem>
<newsListItem href="http://api.mydomain.com/eee83d24-906b-4736-91d9-1031621b79eb/news/800577416/">
   <id>800577416</id>
   <publishDate>2011-08-17T15:13:12</publishDate>
   <lastModifiedDate>2011-08-17T15:14:36</lastModifiedDate>
   <headline>Apple Macbook Air</headline>
 </newsListItem>
</news>

记住上面显示的所有数据都来自 MySQL 数据库。

我怎样才能实现上述目标?欢迎任何示例示例,想法。如果有人可以扔灯,我将不胜感激。 WCF是要走的路吗?还是使用普通的旧 ASP.NET XDoc 等...?

请指教。非常感谢!

【问题讨论】:

    标签: xml xml-serialization linq-to-xml wcf-rest


    【解决方案1】:

    您可以选择使用 WCF REST 服务并轻松返回您的 XML。只需使用 here 找到的 Visual Studio 项目模板创建一个项目。 如果您已经定义了从 MySQL 数据库读取数据的类,您可以返回它们并让 WCF 为您序列化它。这样您就不必使用 XDoc/XElement 来构建 XML。 方法和服务类看起来像:

    [ServiceContract]
    [XmlSerializerFormat]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
    public class APIService
    {
      [WebGet(UriTemplate = "{key}", ResponseFormat = WebMessageFormat.Xml)]
      public APIData GetAPIData(string key)
      {
        // build apiData object from DB using "key"
        return apiData
      }
    
      [WebGet(UriTemplate = "{key}/news", ResponseFormat = WebMessageFormat.Xml)]
      public APINewsData GetAPINewsData(string key)
      {
        // build apiNewsData object from DB using "key"
        return apiNewsData
      }
    
    
    }
    

    如果您使用 XmlSerializer 类(通过像上面那样指定 [xmlSerializerFormat] 属性)而不是 DataContractSerializer 类(默认 WCF 序列化程序),您可以更好地控制返回 XML 的外观。但它比默认选项慢。更多详情:http://msdn.microsoft.com/en-us/library/ms733901.aspx

    【讨论】:

    • 谢谢。我使用带有 XDoc 和 XElement 的 RouteTables 来创建 XML。根据我们的应用程序结构,WCF 有一些限制,所以不想这样做。但感谢您的回应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2012-03-20
    相关资源
    最近更新 更多