在.NET(C#)Web服务中以本机方式返回XML?

在.NET(C#)Web服务中以本机方式返回XML?,c#,.net,xml,web-services,C#,.net,Xml,Web Services,我意识到.NET中的SOAP web服务返回web方法返回的任何对象的XML表示,但是如果我想返回XML格式的数据,那么存储它的最佳对象是什么 我正在使用来编写XML,下面是代码: XmlWriter writer = XmlWriter.Create(pathToOutput); writer.WriteStartDocument(); writer.WriteStartElement("People"); writer.WriteStartElement("Person"); writer

我意识到.NET中的SOAP web服务返回web方法返回的任何对象的XML表示,但是如果我想返回XML格式的数据,那么存储它的最佳对象是什么

我正在使用来编写XML,下面是代码:

XmlWriter writer = XmlWriter.Create(pathToOutput);
writer.WriteStartDocument();
writer.WriteStartElement("People");

writer.WriteStartElement("Person");
writer.WriteAttributeString("Name", "Nick");
writer.WriteEndElement();

writer.WriteStartElement("Person");
writer.WriteStartAttribute("Name");
writer.WriteValue("Nick");
writer.WriteEndAttribute();
writer.WriteEndElement();

writer.WriteEndElement();
writer.WriteEndDocument();

writer.Flush();
现在,我可以将此输出作为字符串返回给调用的webmethod,但它在此处显示为
XML
,是否仍要返回完整的XML


请在您的答案中给出一个例子,说明如何使用XMLcript或另一个内部对象(如果您认为XmlWriter是一个糟糕的选择)使用该对象。Xml包(名称空间)有许多对象,但我还没有找到合适的文档,说明如何将这些对象一起使用,或者在什么情况下使用这些对象。

只需返回一个XmlDocument即可。e、 g

[WebMethod]
public XmlDocument Quux()
{

}

您可以有一个表示XML的类,然后返回该类,或者也可以在XMLNode中返回XML,这就是我最终的做法

StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb, settings);

writer.WriteStartDocument();
writer.WriteStartElement("People");

writer.WriteStartElement("Person");
writer.WriteAttributeString("Name", "Nick");
writer.WriteEndElement();

writer.WriteStartElement("Person");
writer.WriteStartAttribute("Name");
writer.WriteValue("Nick");
writer.WriteEndAttribute();
writer.WriteEndElement();

writer.WriteEndElement();
writer.WriteEndDocument();

writer.Flush();

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(sb.ToString());
return xmlDocument;

这可能不是最好的方法,但似乎有效。如果你有更好的方法,请告诉我。谢谢。

XmlElement,不是XmlDocument


是的,我一直在研究这个问题,但我不明白XmlWriter是如何与XmlDocument交互的。这是系统的一个缺陷,你的答案不是我想要的(尽管我的问题不够清楚,这是我的缺陷,我纠正了),所以我投了反对票。但我可以看到你积极地试图帮助我,所以我取消了否决票。系统需要一种方式来表达…感谢您的帮助,但这不是我想要的答案。您可能需要将XmlWriter包装在using语句中:using(XmlWriter writer=XmlWriter.Create(sb,settings)){build xml and return xmldocument}它的实际in方法由web方法调用,因此,希望CLR能够有效地进行垃圾收集。感谢您的帮助,Kev。还有一件事需要注意,如果您向Web服务添加Web引用(如果您的客户端基于.NET),生成的WS-proxy代码将返回一个XmlNode,而不是XmlDocument。只是让你知道。:)嗯,有趣的是,我实际上是通过Java使用服务的。这也带来了一些有趣的挑战……XmlDocument从XmlNode派生而来,因此使用XPath查询xml或创建XPathNavigators等不会带来太多困难。请明确,您返回的是一个片段,而不是一个完整的文档。例如,没有声明。等等