C#中XML问题
- C# code
SqlConnection str = new SqlConnection("server=.;database=db_test;Trusted_Connection=true"); string str1 = "select 雇员ID,姓氏,头衔 from student"; str.Open(); DataSet dt = new DataSet(); SqlDataAdapter da1 = new SqlDataAdapter(str1, str); da1.Fill(dt); dt.WriteXmlSchema("C:\\ttt.xml"); //dt.WriteXml("C:\\tt.xml"); Console.Write("OK!"); str.Close();
得到如下的代码:
- XML code
<?xml version="1.0" standalone="yes"?><xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="Table"> <xs:complexType> <xs:sequence> <xs:element name="雇员ID" type="xs:short" minOccurs="0" /> <xs:element name="姓氏" type="xs:string" minOccurs="0" /> <xs:element name="头衔" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element></xs:schema>
请大家指点下,如何才能获取到雇员ID、姓氏、头衔这些属性。以及如何获取他们的数据类型,如short、string
[解决办法]
首先问楼主,为什么要上面的xml?
直接从DataSet中取不就可以了么?
如果非要从xml中取,,如下
/// <summary>
/// 获取指定节点下面对应属性的值
/// </summary>
/// <param name="strFileName">文件路径</param>
/// <param name="nodeName">节点名称</param>
/// <param name="nodeDir">指定节点所在的节点目录</param>
/// <param name="attribute">节点对应的属性名称</param>
/// <returns></returns>
public static string GetNodeValue(string strFileName, string nodeName, string nodeDir, string attribute)
{
string value = null;
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(strFileName);
XmlNodeList nodeList = xmlDoc.SelectSingleNode(nodeDir).ChildNodes;//获取bookstore节点的所有子节点
foreach (XmlNode xn in nodeList) //遍历所有子节点
{
XmlElement xe = (XmlElement)xn; //将子节点类型转换为XmlElement类型
if (xe.Name == nodeName)
{
//value = xe.InnerText.Trim();
value = (xe).Attributes[attribute].Value;
break;
}
}
}
catch (Exception exp)
{
throw exp;
}
return value;
}
[解决办法]
1、可以用DataTable.ReadXmlSchema()方法来还原DataTable,然后查询DataColumn的Name和DataType属性
2、也可以直接分析XML
- C# code
using System.Xml;//...XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("C:\\ttt.xml"); XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDoc.NameTable); nsManager.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema"); XmlNodeList xmlNodeList = xmlDoc.DocumentElement.SelectNodes(@"//xs:sequence/xs:element", nsManager); Console.WriteLine("{0} nods founded",xmlNodeList.Count); foreach (XmlNode node in xmlNodeList) { Console.WriteLine("Name={0} Type={1}", node.Attributes["name"].Value, node.Attributes["type"].Value); }