如何去除ASP.Net Web Service返回XML的缩进与换行?
解决WebMethod返回紧凑无格式XML的问题
嘿,这个问题我之前也碰到过,其实解决起来很简单!默认情况下ASP.NET的WebMethod在返回XmlDocument时,会自动给XML加上缩进和换行来美化显示,但这确实会给后续解析带来额外空白节点的麻烦。
你可以试试下面两种方案,都能生成你想要的无缩进、无换行的紧凑XML:
方案一:直接返回格式化后的字符串(推荐)
不要返回XmlDocument类型,改成返回字符串,这样你可以完全控制XML的输出格式:
[WebMethod] public string SampleXML() { XmlDocument doc = new XmlDocument(); doc.LoadXml("<note><to>Foo</to><from>Bar</from><body>Test message.</body></note>"); using (StringWriter sw = new StringWriter()) using (XmlTextWriter xw = new XmlTextWriter(sw)) { // 关闭格式化,不生成缩进和换行 xw.Formatting = Formatting.None; doc.WriteTo(xw); return sw.ToString(); } }
运行这个方法后,返回的就是完全紧凑的XML:
<?xml version="1.0" encoding="utf-8"?><note><to>Foo</to><from>Bar</from><body>Test message.</body></note>
方案二:使用XmlWriterSettings配置输出(更灵活)
如果你需要更细致的控制(比如是否保留XML声明、编码格式等),可以用XmlWriterSettings来配置:
[WebMethod] public string SampleXML() { XmlDocument doc = new XmlDocument(); doc.LoadXml("<note><to>Foo</to><from>Bar</from><body>Test message.</body></note>"); XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = false; // 关闭缩进 settings.OmitXmlDeclaration = false; // 保留XML声明(默认也是false,这里显式写出来更清晰) settings.NewLineHandling = NewLineHandling.None; // 不处理换行 using (StringWriter sw = new StringWriter()) using (XmlWriter writer = XmlWriter.Create(sw, settings)) { doc.WriteTo(writer); writer.Flush(); return sw.ToString(); } }
为什么不直接返回XmlDocument?
原因是ASP.NET的WebMethod在序列化XmlDocument对象时,内部会自动应用格式化规则,添加缩进和换行,这部分是框架默认行为,很难直接修改。而返回字符串的方式绕开了框架的自动格式化,完全由你控制输出内容。
这样修改后,你再查看返回数据的源码,就会得到你想要的紧凑XML,不会再有额外的空白节点干扰解析啦!
内容的提问来源于stack exchange,提问作者Alex W
相关产品推荐
相关产品推荐

