string configPath = System.IO.Path.GetFullPath(@ "Win.config ");
System.Xml.XmlTextReader ConfigXTR = new System.Xml.XmlTextReader(configPath);
while ( ConfigXTR.Read() )
{
//定位到配置节点
if (ConfigXTR.NodeType == XmlNodeType.Element && ConfigXTR.Name == "appSettings ")
{
while (ConfigXTR.Read())
{
//结束时退出读取
if (ConfigXTR.NodeType == XmlNodeType.EndElement && ConfigXTR.Name == "appSettings ")
{
break;
}
if (ConfigXTR.NodeType == XmlNodeType.Element && ConfigXTR.Name == "add ")
{
//定位到属性
ConfigXTR.MoveToAttribute( "key ");
switch ( ConfigXTR.Value )
{
case "DataBaseName ":
{
ConfigXTR.MoveToAttribute( "value ");
m_connType.DataBaseName = ConfigXTR.Value;
break;
}
case "UserID ":
{
ConfigXTR.MoveToAttribute( "value ");
m_connType.UserID = ConfigXTR.Value;
break;
}
case "Password ":
{
ConfigXTR.MoveToAttribute( "value ");
m_connType.Password = ConfigXTR.Value;
break;
}
case "IntegratedSecurity ":
{
ConfigXTR.MoveToAttribute( "value ");
if ( ConfigXTR.Value.ToUpper() == "FALSE " )
m_connType.IntegratedSecurity = false;
else
m_connType.IntegratedSecurity = true;
break;
}
case "ServerName ":
{
ConfigXTR.MoveToAttribute( "value ");
m_connType.ServerName = ConfigXTR.Value;
break;
}
case "ConnectTimeout ":
{
ConfigXTR.MoveToAttribute( "value ");
m_connType.ConnectTimeout = Convert.ToInt32(ConfigXTR.Value);
break;
}
default:
break;
}
}
}
}
try..
private DataTable GetData()
{
//建一个DataTable
DataTable dt = new DataTable();
dt.Columns.Add( "CardNum ", typeof(String));
dt.Columns.Add( "Name ", typeof(String));
dt.Columns.Add( "Sex ", typeof(String));
dt.Columns.Add( "Height ", typeof(String));
//读取xml
XmlDocument doc = new XmlDocument();
doc.Load(@ "../../test.xml ");
XmlNodeList nodes = doc.SelectNodes(@ "//Result ");
foreach (XmlNode node in nodes)
{
DataRow row = dt.NewRow();
row[ "CardNum "] = node.ChildNodes[0].ChildNodes[1].InnerText;
row[ "Name "] = node.ChildNodes[1].ChildNodes[1].InnerText;
row[ "Sex "] = node.ChildNodes[2].ChildNodes[1].InnerText;
row[ "Height "] = node.ChildNodes[3].ChildNodes[1].InnerText;
dt.Rows.Add(row);
}
//返回datatable
return dt;
}
//数据绑定
this.GridView1.DataSource=GetData();
this.GridView1.DataBind();
我取A表的一条记录,B和C表的两条记录数据打包成如下XML串:
string dataXml=
<DATA>
<DATA_A>
<A1>
a1
</A1>
<A2>
a2
</A2>
</DATA_A>
<DATA_B>
<ITEM>
<B1>
b1
</B1>
<B2>
b2
</B2>
</ITEM>
<ITEM>
<B1>
b1
</B1>
<B2>
b2
</B2>
</ITEM>
</DATA_B>
<DATA_C>
<ITEM>
<C1>
c1
</C1>
<C2>
c2
</C2>
</ITEM>
<ITEM>
<C1>
c1
</C1>
<C2>
c2
</C2>
</ITEM>
</DATA_C>
</DATA>
然后执行 ds.ReadXML(new System.IO.StringReader(dataXml),IgnoreSchema)
这样形成的dataset ds 是不是有名为DATA_A、DATA_B、DATA_C的三个表,且DATA_A中有一条记录,DATA_B和DATA_C中各有两条记录,即是否与我打包XML字符串的数据源一致?
最佳解决方案,与各方兄弟提的大致相同.
我现在将贴简单的源码出来
XmlDataDocument xmlDoc = new XmlDataDocument();
// 用于整个系统调用
DataSet xmlDataSet;
//将xmlDataSet与xmlDoc关联
xmlDataSet = xmlDoc.DataSet;
//将xml文件的schema读入xmlDataSet,此句相当重要
xmlDataSet.ReadXmlSchema("book.xml");
//将xml file 载入 xmlDoc,此时xmlDataSet时同拥有相应的数据被填充.
xmlDoc.Load("book.xml");
以后在系统中就操作xmlDataSet,就像操作DB一样了.