level 1
Sxin0517
楼主
public static DataTable GetData(string path,string tableName,params XmlParamter[] param)
{
XmlDocument doc = new XmlDocument();
try
{
///导入XML文档
doc.Load(path);
}
catch(Exception ex)
{
throw new Exception(ex.Message,ex);
}
DataTable dt = new DataTable();
///获取根节点
XmlNode rootNode = doc.SelectSingleNode(“/”+tableName+”s”);
If(rootNode == null) return null;
If(rootNode.ChildNodes.Count == 0) return null;
///创建保存记录的数据列
Foreach(XmlAttribute attr in rootNode.ChildNodes[0].Attributes)
{
dt.Columns.Add(new DataColumn(attr.Name,typeof(string)));
}
///创新获取数据节点的XPath
String xmlPath = “/”+tableName+”s/”+tableName;
Int operationCount =0;
StringBuilder operation = new StringBuilder();
Foreach(XmlParamter p in param)
{
if(p.Direction == ParameterDirection.Insert
||p. Direction == ParameterDirection.Update)
{ continus;
}
///创建条件表达式
Switch(p.Direction)
{
Case ParameterDirection.Equal:
operation.Append(“@”+p.Name+”=”+p.Value+””);
break;
Case ParameterDirection.NotEqual:
operation.Append(“@”+p.Name+”<>”+p.Value+””);
break;
Case ParameterDirection.Little:
operation.Append(“@”+p.Name+”<”+p.Value+””);
break;
Case ParameterDirection.Great:
operation.Append(“@”+p.Name+”>”+p.Value+””);
break;
Case ParameterDirection.Like:
operation.Append(“contains(@”+p.Name+”,”+p.Value+”)”);
break;
default:break;
}
operationCount++;
operation.Append(“and”);
}
If(operationCount > 0)
{ ///修正XPath
operation.Remove(operation.Length - 5,5);
xmlPath += “[”+ operation.ToString()+”]”;
}
XmlNodeList nodeList = doc.SelectNodes(xmlPath);
///添加节点的数据
Foreach(XmlNode node in nodeList)
{
DataRow row = dt.NewRow();
Foreach(DataColumn column in dt.Columns)
{ ///读取每一个属性
row[column.ColumnName]
node.Attributes[column.ColumnName].Values;
}
Dt.Rows.Add(row);
}
Return dt;
}