• 根据字符串格式的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;
    }
    }
  • 相关阅读:
    debian8 vga 文本模式下出现闪屏
    Delphi中根据分类数据生成树形结构的最优方法
    SQL获取每月、每季度、每年的最后一天记录
    Delphi实现树型结构
    Delphi中initialization和finalization
    Delphi 连接 Paradox
    delphi2007单个文件(pas)的控件安装
    Delphi安装*.pas扩展名的控件
    数据库组件介绍(Delphi)
    Delphi控件开发浅入深出(三)
  • 原文地址:https://www.cnblogs.com/gylspx/p/22123qweq.html
Copyright © 2020-2023  润新知