【发布时间】:2011-09-17 15:37:18
【问题描述】:
我是 c# asp.net 的新人。 我想在我的 asp.net Web 应用程序的 c# 代码隐藏文件中编写 xml 文件,并将这个 xml 文件作为字符串传递给 webservice 。任何人都可以帮助我,这对我的项目非常有用。 谢谢你
【问题讨论】:
-
问题不太清楚,请详细说明...您到底想做什么?
我是 c# asp.net 的新人。 我想在我的 asp.net Web 应用程序的 c# 代码隐藏文件中编写 xml 文件,并将这个 xml 文件作为字符串传递给 webservice 。任何人都可以帮助我,这对我的项目非常有用。 谢谢你
【问题讨论】:
您可以使用XMLDocument 类。它有各种 CreateXXX 方法来创建 XML 元素。
看来您不需要保存 XML 文件,因此您可以在完成后使用Save(String) 方法将其序列化为字符串。
【讨论】:
看到这个问题: How can I build XML in C#?
如果您使用 .Net4,XDocument 类可以工作,对于 .Net2,请使用 XmlDocument。
XDocument.ToString() 直接将 XML 作为字符串返回。对于 XmlDocument 类,您可以使用 XmlDocument.Save() 方法来保存到流或 TextWriter XmlDocument.OuterXml 属性。
关于该问题的两个示例都演示了如何将其输出为字符串。您可以使用它将字符串传递给您的网络服务。
【讨论】:
using System.Xml;
using System.Xml.Schema;
XmlTextWriter xtwFeed = new XmlTextWriter(Server.MapPath("rss.xml"), Encoding.UTF8);
xtwFeed.WriteStartDocument();
// The mandatory rss tag
xtwFeed.WriteStartElement("rss");
xtwFeed.WriteAttributeString("version", "2.0");
// Write all the tags like above and end all elements
xtwFeed.WriteEndElement();
xtwFeed.WriteEndDocument();
xtwFeed.Flush();
xtwFeed.Close();
【讨论】:
您可以使用XmlSerializer 类来序列化 XML 中的对象:
序列化到文件:
void SaveAsXmlToFile(object o, string fname)
{
XmlSerializer ser = new XmlSerializer(o.GetType());
using (var f = File.Open(fname, FileMode.OpenOrCreate))
ser.Serialize(f, o);
}
你也可以像XmlSerializer一样使用DataContractSerializer类。
你也可以将一个对象序列化为一个字符串,然后返回:
序列化为字符串:
string ToXml(object o)
{
XmlSerializer ser = new XmlSerializer(o.GetType());
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
ser.Serialize(sw, o);
return sb.ToString();
}
此外,如果您需要对生成的 Xml 进行更多控制,您可以使用结构化的 xml 对象,如 XmlDocument 等,或使用 xml 编写类,如 XmlWriter,如其他答案所示。
【讨论】:
正如“fiver”所提到的,您可以使用 XmlDocument 或新的简化版本 XDocument 来创建 XML 文档。这是来自MSDN 的示例代码 sn-p,用于创建 XML 文档并写入文件。
XDocument doc = new XDocument(
new XElement("Root",
new XElement("Child", "content")
)
);
doc.Save("Root.xml");
这会将以下文本写入 xml 文件
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Child>content</Child>
</Root>
注意:XDocument 仅在 .NET framework 3.5 及更高版本上受支持
【讨论】: