XMLWriter:带有标记名称和字符串的WriteStartElement,用于指示标记名称

我有相同的标签名称和不同的字符串与不同的标签名称。

这是XML。

 1001   10 name COMMON 15-FEBRUARY-2013 name  19  58239346  

这是我目前的代码:

 public String cards(string id) { StringWriter str = new StringWriter(); XmlTextWriter xmlWriter = new XmlTextWriter(str); xmlWriter.Formatting = Formatting.Indented; xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("order"); xmlWriter.WriteElementString("ID", "1001"); xmlWriter.WriteStartElement("config"); xmlWriter.WriteStartElement("properties"); /* * Create  at here * * * * */ xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); xmlWriter.WriteElementString("ClientID", id); xmlWriter.WriteEndElement(); xmlWriter.WriteEndDocument(); xmlWriter.Flush(); xmlWriter.Close(); return str.ToString(); } 

如何为XMLWriter编写入口标记??? 我不知道怎么写它。

问题似乎是关于标签; 这基本上是一系列5个类似于:

 xw.WriteStartElement("entry"); xw.WriteAttributeString("key", "RecordTotal"); xw.WriteString("10"); xw.WriteEndElement(); 

但是,您可能还想查看XmlSerializer – 可能会使这更容易:

 using System; using System.Collections.Generic; using System.Xml.Serialization; static class Program { static void Main() { var order = new Order { ClientId = 1001, Id = 58239346, Config = new OrderConfig { Id = 19, Properties = { new OrderProperty { Key = "RecordTotal", Value = "10"}, new OrderProperty { Key = "InputFileName", Value = "name"}, new OrderProperty { Key = "ConfigName", Value = "COMMON_"}, new OrderProperty { Key = "DeliveryDate", Value = "15-FEBRUARY-2013"}, new OrderProperty { Key = "Qualifier", Value = "name"} } } }; var ser = new XmlSerializer(typeof(Order)); ser.Serialize(Console.Out, order); } } [XmlRoot("order")] public class Order { [XmlElement("clientID", Order = 0)] public int ClientId { get; set; } [XmlElement("config", Order = 1)] public OrderConfig Config { get; set; } [XmlElement("orderID", Order = 2)] public int Id { get; set; } } public class OrderConfig { [XmlElement("id", Order = 2)] public int Id { get; set; } private readonly List properties = new List(); [XmlArray("properties", Order = 1), XmlArrayItem("entry")] public List Properties { get { return properties; } } } public class OrderProperty { [XmlAttribute("key")] public string Key {get;set;} [XmlText] public string Value {get;set;} } 

我很想将Linq-to-XML用于此:

 using System; using System.Xml.Linq; namespace ConsoleApplication1 { class Program { static void Main() { XElement root = new XElement("order", new XElement("clientId", 1001), new XElement("config", new XElement("properties", new XElement("entry", new XAttribute("key", "RecordTotal"), 10), new XElement("entry", new XAttribute("key", "InputFileName"), "name"), new XElement("entry", new XAttribute("key", "ConfigName"), "COMMON"), new XElement("entry", new XAttribute("key", "DeliveryDate"), "15-FEBRUARY-2013"), new XElement("entry", new XAttribute("key", "Qualifier"), "name")), new XElement("id", 19)), new XElement("orderID", 58239346) ); Console.WriteLine(root); } } } 

通过比较,如果你想要多个属性元素,那么XML看起来像这样:

  1001    10 name COMMON 15-FEBRUARY-2013 name   15 othername UNCOMMON 23-FEBRUARY-2013 qname   19  58239346  

你的代码看起来像这样:

 using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; namespace ConsoleApplication1 { class Program { static void Main() { XElement root = new XElement("order", new XElement("clientId", 1001), new XElement("config", new XElement("properties", createEntries(getEntries())), new XElement("id", 19)), new XElement("orderID", 58239346) ); Console.WriteLine(root); } static IEnumerable getEntries() { yield return new Entry { RecordTotal = 10, InputFileName = "name", ConfigName = "COMMON", DeliveryDate = "15-FEBRUARY-2013", Qualifier = "name" }; yield return new Entry { RecordTotal = 15, InputFileName = "othername", ConfigName = "UNCOMMON", DeliveryDate = "23-FEBRUARY-2013", Qualifier = "qname" }; } static IEnumerable createEntries(IEnumerable entries) { return from entry in entries select new XElement( "property", new XElement("entry", new XAttribute("key", "RecordTotal"), entry.RecordTotal), new XElement("entry", new XAttribute("key", "InputFileName"), entry.InputFileName), new XElement("entry", new XAttribute("key", "ConfigName"), entry.ConfigName), new XElement("entry", new XAttribute("key", "DeliveryDate"), entry.DeliveryDate), new XElement("entry", new XAttribute("key", "Qualifier"), entry.Qualifier)); } } sealed class Entry { public int RecordTotal; public string InputFileName; public string ConfigName; public string DeliveryDate; public string Qualifier; } } 

为每个条目尝试此操作:

 xmlWriter.WriteStartElement("entry"); xmlWriter.WriteAttributeString("key", "RecordTotal"); xmlWriter.WriteValue(10); xmlWriter.WriteEndElement(); 

您可以尝试以下新条目:

 xmlWriter.WriteStartElement("entry"); xmlWriter.WriteAttributeString("key", "RecordTotal"); xmlWriter.WriteValue(10); xmlWriter.WriteEndElement(); 

您可能希望查看XML Serizalizer。 以下是与此相关的代码示例:

  try { XmlSerializer serializer = new XmlSerializer(typeof(T)); StringWriter writer = new StringWriter(); serializer.Serialize(writer, myClass); StringBuilder sb = new StringBuilder(writer.ToString()); return sb.ToString(); } catch (Exception ex) { throw new System.Exception("Class To XML Error: " + ex.Message); }