近工作涉及到将Object转化为XML的数据格式。再网上找了一些资料。现在在这里总结一下目前使用到的方法
主要转换代码如下:
| 代码如下 | 复制代码 |
|
public static Stream TransforToXMLFormat(object obj)
|
|
十分简单地使用了.Net的反射机制。生成出来的XML效果可以接受。重点要注意的几点:
1. 类必须要有Name这个属性否则转化会报错!
2. 使用[XmlAttribute]放于Name上面,即:
| 代码如下 | 复制代码 |
|
[XmlAttribute] |
|
可以将Name变成XML的属性而不是XML的元素,即:
| 代码如下 | 复制代码 |
|
|
|
而不是:
| 代码如下 | 复制代码 |
|
|
|
3. 想要将属性输出为XML的元素,属性必须是public的。
4. 输出是使用了List,若想改变List里面每个元素的类名需要在List上面加上[XmlElement(ElementName="想要改变的名字")]即:
| 代码如下 | 复制代码 |
|
[XmlElement(ElementName="想要改变的名字")] |
|
附加将Hashtable里面的值转化成List的操作
| 代码如下 | 复制代码 |
|
List |
|
DataTable转成XML文件
数据库表position有三个字段:
字段名 字段类型
position_id int
position_name varchar
position_desc varchar
下面是Datatable转XML的生成源码:
| 代码如下 | 复制代码 |
| protected void Page_Load(object sender, EventArgs e) { //通过数据访问层把position读取到Datatable BizRules.PersonnelDAL pl = new PersonnelDAL(); DataTable dt = pl.Getposition(); StringBuilder str = new StringBuilder(); str.Append(DataTableToXml(dt)); this.CreateXml(str.ToString(), "test.xml"); Response.Write("生成test.xml成功"); } /// /// 生成文件 /// /// /// public void CreateXml(string val, string filename) { UnicodeEncoding ucode = new UnicodeEncoding(); StreamWriter sw = new StreamWriter(Server.MapPath(filename)); sw.WriteLine(""); sw.WriteLine(val); sw.Close(); sw.Dispose(); } /// /// 转换成XML格式字符串 /// /// /// public string DataTableToXml(DataTable dt) { StringBuilder strXml = new StringBuilder(); strXml.AppendLine(" for (int i = 0; i { strXml.AppendLine(" for (int j = 0; j { strXml.AppendLine(" " dt.Rows[i][j] "" dt.Columns[j].ColumnName ">"); } strXml.AppendLine(" } strXml.AppendLine(" return strXml.ToString(); } |
|
下面看下生成XML文件的效果:
| 代码如下 | 复制代码 |
|
|
|
如果你使用DataSet,可以把DataSet转成Datatable,再使用上面的方法就可以了。
数据转换xml文件
从数据库的查询结果的数据保存到XML文件
| 代码如下 | 复制代码 |
|
Sub Page_Load(Sender As Object, E As EventArgs) Dim strConnection As String strConnection = "Provider=Microsoft.Jet.OLEDB.4.0; " & _ objConnection = New OledbConnection(strConnection) objAdapter.Fill(objDataSet, "Employees") objDataSet.WriteXml(Server.MapPath("Employee2.xml")) End Sub |
|
更多详细内容请查看:https://www.111cn.net/net/37/38865.htm