1.字符串拼接加載為XML
簡單來說,這種是顯而易見的老實或者蠢一點的方法。將字符串拼接成XML的字符串,然后LoadXml即可。
2.將數據對象序列化為XML字符串后加載為XML
類、變量常用頭(聲明):
[XmlRootAttribute]:對根節點的描述,在類聲明中使用
[XmlType]:對節點描述,在類聲明中使用
[XmlElement]:節點下內部節點描述,如果對數組標識,是對數組單元描述
[XmlAttribute]:節點下內部屬性描述
[XmlArrayItem]:數組單元項描述
[XmlArray]:數組描述
[XmlIgnore]:使該項不序列化
[XmlText]:做為節點的text文本輸出
比如,我想要生成形如下面的形式
<Test name="是我的"> 你 </Test>
1 [WebMethod] 2 public XmlDocument DemoXML() { 3 Test t = new Test(); 4 t.name = "是我的"; 5 t.Comment = "你"; 6 7 XmlDocument XmlDoc = new XmlDocument(); 8 string xmlstring = Utility.Tool.Serialize(t); 9 XmlDoc.LoadXml(xmlstring); 10 11 return XmlDoc; 12 }
序列化的類:
public class Test { [XmlAttribute]//頭聲明為Test的屬性 public string name; private string comment; [XmlText]//頭聲明為Test的值 public string Comment { get { return comment; } set { comment = value; } } }
但是當Test節點的值有特殊符號的時候,xml的就會發生錯誤(應該是跟xml的關鍵字符發生沖突)。這時候就需要加上CDATA,用以忽略值內的特殊符號。
public class Test { [XmlAttribute]//頭聲明為Test的屬性 public string name; private string comment; [XmlIgnore]//指明在序列化時是否序列化一個屬性,這里表示不序列化此屬性 public string Comment { get { return comment; } set { comment = value; CDataComment = new CDATA(comment); } } private CDATA cDataComment; [XmlElement(ElementName = "xiaoqin_SuperElement", Type = typeof(CDATA))] public CDATA CDataComment { get { return cDataComment; } set { cDataComment = value; } } }
這時的結果是:
<Test name="是我的"> <xiaoqin_SuperElement> <![CDATA[ 你 ]]> </xiaoqin_SuperElement> </Test>
跟我想要的結果並不一樣,怎么辦,我目前也不知道怎么做。暫且用代替的:
xmlstring = xmlstring.Replace("<xiaoqin_SuperElement>", "").Replace("</xiaoqin_SuperElement>", "");