应用JScript和XML自定义无刷新多级联动菜单
2010-09-14 13:39:10 来源:WEB开发网WriteStartElement方法用于写出指定的开始标记;
WriteEndElement方法用于关闭一个元素并弹出相应的命名空间范围;
WriteAttributeString方法用于写出具有指定值的属性;
WriteStartAttribute方法用于书写属性的起始内容;
WriteEndAttribute 方法用于关闭上一个 WriteStartAttribute 调用。
下面的代码将演示如何把DataSet中的数据导出到XML文件中并做出详细说明。首先是定义一个类的静态方法DataSetToXML,其程序实现思想是先从DataSet中获得的省级数据,然后做循环来获得每个省所包含的地级市的数据,类似再做地级市数据的循环来获得每个地级市所包含的县(市)级数据。
/// <summary>
/// 将DataSet中的数据导出到XML文件中
/// </summary>
/// <param name="dsSet">要导出的DataSet</param>
/// <returns>返回1表示方法执行成功,否则返回为-1</returns>
public static int DataSetToXML(DataSet dsSet)
{
//判断当前返回的DataSet是否为空,为空则返回-1
if (dsSet == null) return -1;
//对XML文件进行必要的设置
XmlWriterSettings settings = null;
settings = new XmlWriterSettings();
if (settings == null) return -1;
//设置相关属性值
settings.Indent = true;
settings.NewLineOnAttributes = false;
//创建XML文件
XmlWriter writer = null;
writer = XmlWriter.Create(@"C:Chinadomain.xml", settings);
if (writer == null) return -1;
//开始写文档
writer.WriteStartDocument();
//开始写标签
writer.WriteStartElement("China");
int i = 0, j = 0, k = 0;
//获取省级数据的动态数组
ArrayList provinceList = FindProvince(dsSet);
for (i = 0; i < provinceList.Count; i++)
{
int iCur = (int)provinceList[i];
writer.WriteStartElement("Province");
writer.WriteAttributeString("name", (String)dsSet.Tables[0].Rows[iCur].ItemArray[1]);
writer.WriteAttributeString("value", (String)dsSet.Tables[0].Rows[iCur].ItemArray[0]);
//查找当前省的所有地级市
ArrayList cityList = FindCity(dsSet, (String)dsSet.Tables[0].Rows[iCur].ItemArray[0]);
for (j = 0; j < cityList.Count; j++)
{
int jCur = (int)cityList[j];
writer.WriteStartElement("City");
writer.WriteAttributeString("name", (String)dsSet.Tables[0].Rows[jCur].ItemArray[1]);
writer.WriteAttributeString("value", (String)dsSet.Tables[0].Rows[jCur].ItemArray[0]);
//设置当前行的父行
dsSet.Tables[0].Rows[jCur].SetParentRow(dsSet.Tables[0].Rows[iCur]);
//查找当前地级市的所有县级市
ArrayList districtList = FindDistrict(dsSet, (String)dsSet.Tables[0].Rows[jCur].ItemArray[0]);
for (k = 0; k < districtList.Count; k++)
{
int kCur = (int)districtList[k];
writer.WriteStartElement("District");
writer.WriteAttributeString("name", (String)dsSet.Tables[0].Rows[kCur].ItemArray[1]);
writer.WriteAttributeString("value", (String)dsSet.Tables[0].Rows[kCur].ItemArray[0]);
//设置当前行的父行
dsSet.Tables[0].Rows[kCur].SetParentRow(dsSet.Tables[0].Rows[jCur]);
writer.WriteEndElement();
}
writer.WriteEndElement();
}
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
//清空缓存并关闭文件
writer.Flush();
writer.Close();
return 1;
}
/// <summary>
/// 查找省级数据
/// </summary>
/// <param name="dsSet">要导出的DataSet</param>
/// <returns>包含省级数据的动态数组</returns>
private static ArrayList FindProvince(DataSet dsSet)
{
int i = 0;
//申请返回列表空间
ArrayList pResList = null;
pResList = new ArrayList();
if (pResList == null) return null;
//循环查找省级数据
for (i = 0; i < dsSet.Tables[0].Rows.Count; i++)
{
object[] s = dsSet.Tables[0].Rows[i].ItemArray;
if (((String)s[0]).Substring(2, 4) == "0000")
{
pResList.Add(i);
}
}
return pResList;
}
/// <summary>
/// 查找某个省的地级数据
/// </summary>
/// <param name="dsSet">要导出的DataSet</param>
/// <param name="strProvince">某省的国标代码</param>
/// <returns>包含某个省的地级数据的动态数组</returns>
private static ArrayList FindCity(DataSet dsSet, String strProvince)
{
int i = 0;
//申请返回列表空间
ArrayList pResList = null;
pResList = new ArrayList();
if (pResList == null) return null;
//循环查找地级数据
for (i = 0; i < dsSet.Tables[0].Rows.Count; i++)
{
object[] s = dsSet.Tables[0].Rows[i].ItemArray;
if (((String)s[0]).Substring(2, 4) != "0000" &&
((String)s[0]).Substring(4, 2) == "00" &&
((String)s[0]).Substring(0, 2) == strProvince.Substring(0, 2))
{
pResList.Add(i);
}
}
return pResList;
}
/// <summary>
/// 查找某个地级市的县级数据
/// </summary>
/// <param name="dsSet">要导出的DataSet</param>
/// <param name="strCity">某地级市的国标代码</param>
/// <returns>包含某个地级市的县级数据的动态数组</returns>
private static ArrayList FindDistrict(DataSet dsSet, String strCity)
{
int i = 0;
//申请返回列表空间
ArrayList pResList = null;
pResList = new ArrayList();
if (pResList == null) return null;
//循环查找县级数据
for (i = 0; i < dsSet.Tables[0].Rows.Count; i++)
{
object[] s = dsSet.Tables[0].Rows[i].ItemArray;
if (((String)s[0]).Substring(2, 4) != "0000" &&
((String)s[0]).Substring(4, 2) != "00" &&
((String)s[0]).Substring(0, 4) == strCity.Substring(0, 4))
{
pResList.Add(i);
}
}
return pResList;
}
更多精彩
赞助商链接