在 ASP.NET 中动态创建 XML(内存)并在浏览器中显示
Posted
技术标签:
【中文标题】在 ASP.NET 中动态创建 XML(内存)并在浏览器中显示【英文标题】:Creating XML on the fly (memory) in ASP.NET and displaying in browser 【发布时间】: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 等...?
请指教。非常感谢!
【问题讨论】:
【参考方案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 有一些限制,所以不想这样做。但感谢您的回应。以上是关于在 ASP.NET 中动态创建 XML(内存)并在浏览器中显示的主要内容,如果未能解决你的问题,请参考以下文章