【问题标题】:How to return XML from an ASPX page如何从 ASPX 页面返回 XML
【发布时间】:2016-03-01 14:30:29
【问题描述】:

我有一个对象,想将其转换为 XML 并以原始格式显示在页面上。

期望的输出

<Response>
 <ResponseCode>100</ResponseCode>
 <ResponseDescription>Test</ResponseDescription>
</Reponse>

代码:

public class Response
{
    public Response(){}

    public string ResponseCode { get; set; }        
    public string ResponseDescription { get; set; }
}

Page_Load()
{
 Response obj = new Response();
 obj.ResponseCode = "100";
 obj.ResponseDescription = "test";

 string xmlString;
 XmlSerializer serializer = new XmlSerializer(typeof(Response));
 XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
 // exclude xsi and xsd namespaces by adding the following:
 ns.Add(string.Empty, string.Empty);

 using (StringWriter textWriter = new StringWriter())
  {
   using (XmlWriter xmlWriter = XmlWriter.Create(textWriter))
    {
      serializer.Serialize(xmlWriter, obj, ns);
    }
   xmlString = textWriter.ToString(); 
  }    
  Response.Write(xmlString);
}

结果是这样的。

100 次测试

我应该怎么做才能得到想要的输出。

【问题讨论】:

  • 嗯.. 你可能会用一些工具来查看响应吗?可能这个工具已经只存在 XML 字符串的 value 吗?尝试搜索 raw response(response as it)
  • 我猜浏览器只是忽略了 xml 标签。试试Response.Write (Server.HTMLEncode(xmlString));HTMLEncode
  • 输出是正确的 XML,但您看到的是 渲染 文本。
  • 是 Response.Write 进入 HTML 页面吗?您可能需要考虑编码/解码您似乎有一个名为Response 的对象,以及一个名为Response 的静态对象?
  • @ZoharPeled。做到了:)。但它有 xml 标头 (&lt;?xml version="1.0"..),我应该删除它

标签: c#


【解决方案1】:

实际问题是您将 XML 输出为 HTML,导致浏览器将响应视为“tag soup”并尝试将其呈现为 HTML 文档。

这会隐藏所有标签及其属性,并且只呈现标签内部和标签之间的文本。

这不是 HTML,而是 XML。所以实际的解决方案是设置正确的内容类型,表明你实际上是从How do you specify your Content Type in ASP.NET WebForms?返回XML:

Response.ContentType = "application/xml";

另外,你是asking to omit the XML declaration。来自how to create an xml using xml writer without declaration elementMSDN: XmlWriterSettings.OmitXmlDeclaration

如果 ConformanceLevel 设置为 Document,则始终编写 XML 声明,即使 OmitXmlDeclaration 设置为 true。

如果 ConformanceLevel 设置为 Fragment,则永远不会编写 XML 声明

所以只需将settings.ConformanceLevel 设置为ConformanceLevel.Fragment。请注意,从技术上讲,您不再编写 XML 文档,但此要求在互操作性中很常见。

【讨论】:

  • 嗯,这是一个比我更好的答案。 +1。
【解决方案2】:

我猜浏览器只是忽略了 XML 标签。 试试这个:

Response.Write (Server.HTMLEncode(xmlString));

Read here 关于 HTMLEncode 方法。

settings.OmitXmlDeclaration = true; 应该删除了 &lt;?xml version... 标记。如果这不起作用,你可以试试这个: 将 xmlString 加载到 XDocument 对象中并删除它的声明 (based on this answer)

XDocument xdoc = XDocument.Parse(xmlString);
xdoc.Declaration = null;
Response.Write (Server.HTMLEncode(xdoc.ToString()));

【讨论】:

  • 当需要编写 XML 时,一般不希望对输出进行“HTML 编码”...
  • 您能看到我的question 之一关于xml 响应吗?
猜你喜欢
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2013-03-20
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多