【发布时间】:2012-08-30 08:38:29
【问题描述】:
我有一个 XML:
<PolicyChangeSet schemaVersion="2.1" username="" description="">
<Note>
<Content></Content>
</Note>
<Attachments>
<Attachment name="" contentType="">
<Description></Description>
<Location></Location>
</Attachment>
</Attachments>
</PolicyChangeSet>
我有一个填充 XML 的方法:
public static void GeneratePayLoad(string url, string policyID)
{
string attachmentName = policyID.Split(new string[] { "REINSTMT" }, StringSplitOptions.None)[0] + "REINSTMT";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(AppVars.pxCentralXMLPayloadFilePath);
XmlNode node = xmlDoc.SelectSingleNode("/PolicyChangeSet");
node.Attributes["username"].Value = AppVars.Username;
node.Attributes["description"].Value = "Upload Documents";
node = xmlDoc.SelectSingleNode("PolicyChangeSet/Note/Content");
node.InnerText = "The attached pictures were sent by the producer.";
node = xmlDoc.SelectSingleNode("/PolicyChangeSet/Attachments/Attachment");
node.Attributes["name"].Value = attachmentName;
node.Attributes["contentType"].Value = "image/tiff";
node = xmlDoc.SelectSingleNode("/PolicyChangeSet/Attachments/Attachment/Description");
node.InnerText = "Combined reinstatement picture file";
node = xmlDoc.SelectSingleNode("/PolicyChangeSet/Attachments/Attachment/Location");
node.InnerText = url;
xmlDoc.Save(AppVars.pxCentralXMLPayloadFilePath);
}
我的问题是,填充 XML 的最佳方式是什么?我觉得有一种更简单的方法可以做到这一点。例如,我确信有一种方法可以消除多次选择单个节点的需要(我目前正在做的事情)。大家有什么推荐的?最好的方法是什么?
【问题讨论】:
-
首先,我将停止使用 XmlDocument 并切换到 XDocument (msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.aspx) 和 XElement (msdn.microsoft.com/en-us/library/system.xml.linq.xelement.aspx)
-
老实说,我会使用一个工具从 xml 模式创建一个对象,然后生成 xml,我会创建一个实例,填充它,并将其序列化为 xml,而不是直接操作xml.
-
@asawyer 是正确的。最好的方法是通过序列化/反序列化。 Xml 应该只用于数据传输。您将 xml 文档反序列化为一个类,然后在该类中设置值,然后反序列化回 xml。
-
使用您需要的信息定义类型并使用 .NET XML 序列化。
-
你们能给我看一个序列化/反序列化的例子吗?