根据字符串格式的xml解析为xml,存到DataTable中

public static class PaperXMLManager
    {

        /// <summary>
        /// 输入试卷信息 生成 试卷内容xml字符串
        /// </summary>
        public static void GetExamPaperXMLStr(XmlDocument objXmlDoc, EntityArrayList<Item> items, string paperCode, ExamPolicy examPolicy)
        {
            XmlNode root = objXmlDoc.SelectSingleNode("ExamPaper");
            XmlNode node;
            XmlElement subnode;
            if (root == null)
            {
                root = objXmlDoc.CreateElement("ExamPaper"); //创建一个<ExamPaper>根节点
                objXmlDoc.AppendChild(root);
            }
            else
            {
                root = objXmlDoc.SelectSingleNode("ExamPaper");//查找<ExamPaper>根节点
            }

            foreach (Item it in items)
            {
                node = objXmlDoc.CreateElement("Item");

                subnode = objXmlDoc.CreateElement("Code");
                subnode.InnerText = it.Code;
                node.AppendChild(subnode);
                subnode = objXmlDoc.CreateElement("Ver");
                subnode.InnerText = it.Ver.ToString();
                node.AppendChild(subnode);
                subnode = objXmlDoc.CreateElement("Score");
                subnode.InnerText = examPolicy.ScorePerItem.ToString();
                node.AppendChild(subnode);
                subnode = objXmlDoc.CreateElement("EPCode");
                subnode.InnerText = examPolicy.EPCode;
                node.AppendChild(subnode);

                root.AppendChild(node);
            }
        }

        /// <summary>
        /// 获取Xml格式字符串的内容
        /// </summary>
        /// <param name="str">Xml格式字符串</param>
        /// <returns>Xml内容的DataTable</returns>
        public static DataTable GetItemTable(string str)
        {
            XmlDocument objXmlDoc = GetXmlDocByStr(str);
            DataTable dt = new DataTable();
            dt.Columns.Add("Code");
            dt.Columns.Add("Ver");
            dt.Columns.Add("Score");
            dt.Columns.Add("EPCode");
            XmlNodeList nodes = objXmlDoc.GetElementsByTagName("Item");
            foreach (XmlNode xmlNode in nodes)
            {
                DataRow dr = dt.NewRow();
                for (int j = 0; j < xmlNode.ChildNodes.Count; j++)
                {
                    dr[j] = xmlNode.ChildNodes[j].InnerText;
                }
                dt.Rows.Add(dr);
            }
            return dt;
        }

        /// <summary>
        /// 获取Xml的内容
        /// </summary>
        /// <param name="objXmlDoc">Xml文件</param>
        /// <returns>Xml内容的DataTable</returns>
        public static DataTable GetItemTable(XmlDocument objXmlDoc)
        {
            DataSet ds = new DataSet();
            StringReader read = new StringReader(objXmlDoc.SelectSingleNode("ExamPaper").OuterXml);
            ds.ReadXml(read);
            DataTable tblRes = new DataTable();
            tblRes = ds.Tables[0];
            return tblRes;
        }

        /// <summary>
        /// 从指定格式的字符串中加载Xml文档
        /// </summary>
        /// <param name="str">xml格式的字符串</param>
        /// <returns>xml文档对象</returns>
        public static XmlDocument GetXmlDocByStr(string str)
        {
            XmlDocument dom = new XmlDocument();
            dom.LoadXml(str);
            return dom;
        }

        /// <summary>
        /// 在当前XML中找到指定值的节点
        /// </summary>
        /// <param name="objXmlDoc">xml</param>
        /// <param name="itemCode">节点内容</param>
        /// <returns>节点</returns>
        public static XmlNode GetNode(XmlDocument objXmlDoc, string itemCode)
        {
            XmlNode Nodelist = objXmlDoc.SelectSingleNode("ExamPaper");

            foreach (XmlNode node in Nodelist.SelectNodes("Item"))
            {
                if (node.SelectSingleNode("Code").InnerText == itemCode)
                {
                    return node;
                }
            }
            return null;
        }

        /// <summary>
        /// 替换掉XML文件中值为oldItemCode的节点下子节点的值
        /// </summary>
        /// <param name="objXmlDoc">xml对象</param>
        /// <param name="oldItemCode">指定节点的值</param>
        /// <param name="code">试题编码</param>
        /// <param name="ver">试题版本</param>
        /// <param name="score">试题分值</param>
        /// <param name="epcode">策略编号</param>
        /// <returns>替换后的XML对象</returns>
        public static XmlDocument ReplaceItem(XmlDocument objXmlDoc, string oldItemCode, string code, string ver, string score, string epcode)
        {
            try
            {
                XmlNode node = GetNode(objXmlDoc, oldItemCode);
                node.SelectSingleNode("Code").InnerText = code;
                node.SelectSingleNode("Ver").InnerText = ver;
                node.SelectSingleNode("Score").InnerText = score;
                node.SelectSingleNode("EPCode").InnerText = epcode;
                return objXmlDoc;
            }
            catch
            {
                return objXmlDoc;
            }
        }

        /// <summary>
        /// 删除选定节点
        /// </summary>
        /// <param name="nodeText">节点内容</param>
        /// <param name="xmlStr">xml字符串</param>
        /// <returns>删除后XmlDocument对象</returns>
        public static XmlDocument DelNode(string nodeText, string xmlStr)
        {
            XmlDocument xmlDoc = GetXmlDocByStr(xmlStr);
            XmlNode node = GetNode(xmlDoc, nodeText);
            if (xmlDoc != null)
            {
                XmlNode Nodelist = xmlDoc.SelectSingleNode("ExamPaper");
                Nodelist.RemoveChild(node);
                return xmlDoc;
            }
            return xmlDoc;
        }
    }

 

以上的方法多一些~你也可以参考我下面的代码~知道XML节点格式后直接解析为一个DataTable,这样你知道内容了就可以显示了:

代码如下:
 /// <summary>
        /// 从指定格式的字符串中加载Xml文档
        /// </summary>
        /// <param name="str">xml格式的字符串</param>
        /// <returns>xml文档对象</returns>
        public static XmlDocument GetXmlDocByStr(string str)
        {
            XmlDocument dom = new XmlDocument();
            dom.LoadXml(str);
            return dom;
        }

        /// <summary>
        /// 获取Xml的内容
        /// </summary>
        /// <param name="objXmlDoc">Xml文件</param>
        /// <returns>Xml内容的DataTable</returns>
        public static DataTable GetItemTable(string str)
        {
            XmlDocument objXmlDoc = GetXmlDocByStr(str);
            DataTable dt = new DataTable();
            dt.Columns.Add("Code");
            dt.Columns.Add("EpCode");
            dt.Columns.Add("Ver");
            dt.Columns.Add("Score");
            dt.Columns.Add("UserScore");
            dt.Columns.Add("RightAnswer");
            dt.Columns.Add("UserAnswer");
            XmlNodeList nodes = objXmlDoc.GetElementsByTagName("Item");
            foreach (XmlNode xmlNode in nodes)
            {
                DataRow dr = dt.NewRow();
                for (int j = 0; j < xmlNode.ChildNodes.Count; j++)
                {
                    dr[j] = xmlNode.ChildNodes[j].InnerText;
                }
                dt.Rows.Add(dr);
            }
            return dt;
        }
    }

posted @ 2012-06-04 11:14  (*^__^*) 嘻嘻…  阅读(283)  评论(0编辑  收藏  举报