日期:2014-05-18  浏览次数:20808 次

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(&qu