读书人

C#中XML有关问题

发布时间: 2012-07-28 12:25:13 作者: rapoo

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);            } 

读书人网 >C#

热点推荐