解析XML

来源:互联网 发布:中国烟草总公司 知乎 编辑:程序博客网 时间:2024/03/28 16:57
public class PhoneSearch
    {
        
private XmlDocument m_XMLDocumet;
        
private XmlNamespaceManager m_XMLNamespaceManager;

        
private string m_XMLData;

        
public string XMLData
        {
            
get { return m_XMLData; }
        }
        
#region 构造函数
        
public PhoneSearch(string XMLData)
        {
            m_XMLData 
= XMLData;
            m_XMLDocumet 
= new XmlDocument();
            m_XMLDocumet.LoadXml(XMLData);
            m_XMLNamespaceManager 
= new XmlNamespaceManager(m_XMLDocumet.NameTable);
            XmlElement rootElement 
= m_XMLDocumet.DocumentElement;
            
if (rootElement.HasAttributes)
            {
                
foreach (XmlAttribute nsAttribute in rootElement.Attributes)
                {
                    
if (nsAttribute.LocalName == "xmlns")
                    {
                        
continue;
                    }
                    m_XMLNamespaceManager.AddNamespace(nsAttribute.LocalName, nsAttribute.Value);
                }
            }
        }
        
#endregion

        
/// <summary>
        
/// 将一个节点的内容转换为Dictionary
        
/// </summary>
        
/// <param name="xpath">xpath</param>
        
/// <returns></returns>
        public static Dictionary<stringstring> getDictionaryOfANode(XmlNodeList childNodeList)
        {
            Dictionary
<stringstring> result = new Dictionary<stringstring>();

            
foreach (XmlNode childNode in childNodeList)//单个节点
            {
                
if (result.ContainsKey(childNode.Name))
                {
                    
continue;
                }
                result.Add(childNode.Name, childNode.InnerXml);
            }
            
return result;
        }

        
/// <summary>
        
/// 将一个节点的内容转换为 ArrayList
        
/// </summary>
        
/// <param name="childNodeList"></param>
        
/// <returns></returns>
        public System.Collections.ArrayList getArrlistOfANode(XmlNodeList childNodeList)
        {
            System.Collections.ArrayList arraylist 
= new System.Collections.ArrayList();

            
foreach (XmlNode childNode in childNodeList)//单个节点
            {
                arraylist.Add(childNode.InnerXml);
            }
            
return arraylist;
        }

        
#region 解析XML
        
/// <summary>
        
/// 解析XML Dictionary
        
/// </summary>
        
/// <param name="xml"></param>
        
/// <param name="xpath"></param>
        
/// <returns></returns>
        public Dictionary<string, Dictionary<stringstring>> XmlToDictionary(string xml, string xpath)
        {
            
//Dictionary<string, string> result = new Dictionary<string, string>();
            Dictionary<string, Dictionary<stringstring>> result = new Dictionary<string, Dictionary<stringstring>>();
            
try
            {
                
//XmlDocument document = new XmlDocument();
                
//document.LoadXml(xml);
                
//XmlElement rootElement = document.DocumentElement;//根节点

                XmlElement rootElement 
= m_XMLDocumet.DocumentElement;
                XmlNodeList childNodeList 
= rootElement.SelectNodes(xpath,m_XMLNamespaceManager);//节点集合,所有子节点
                int i = 0;
                
foreach (XmlNode childNode in childNodeList)
                {
                    
if (result.ContainsKey(childNode.Name))
                    {
                        
continue;
                    }
                    
                    Dictionary
<stringstring> myDic = getDictionaryOfANode(childNode.ChildNodes);

                    result.Add(Convert.ToString(i), myDic);
                    i
++;
                }
            }
            
catch (XmlException ex)
            {
                
//Console.WriteLine(ex.Message);
            }
            
return result;
        }

        
/// <summary>
        
/// 解析XML 返回dataTable
        
/// </summary>
        
/// <param name="xml"></param>
        
/// <param name="xpath"></param>
        
/// <returns></returns>
        public DataTable XmlToDataTable(string xml, string xpath)
        {
            DataTable datTable 
= new DataTable();
            DataColumn dc 
= new DataColumn("UserPhoNum");
            
////指定字段的数据类型,这步没有也不会出错
            //dc.DataType = System.Type.GetType("System.String");
            datTable.Columns.Add(dc);
            dc 
= new DataColumn("fIDUser");
            datTable.Columns.Add(dc);
            dc 
= new DataColumn("StaffPhoNum");
            datTable.Columns.Add(dc);
            dc 
= new DataColumn("Staff");
            datTable.Columns.Add(dc);
            dc 
= new DataColumn("dtCall");
            datTable.Columns.Add(dc);
            dc 
= new DataColumn("dtAeccpt");
            datTable.Columns.Add(dc);
            dc 
= new DataColumn("dtEnd");
            datTable.Columns.Add(dc);
            dc 
= new DataColumn("RECFileName");
            datTable.Columns.Add(dc);
            dc 
= new DataColumn("Evaluate");
            datTable.Columns.Add(dc);
            dc 
= new DataColumn("Question");
            datTable.Columns.Add(dc);
            dc 
= new DataColumn("Solve");
            datTable.Columns.Add(dc);

            
try
            {
                XmlElement rootElement 
= m_XMLDocumet.DocumentElement;
                XmlNodeList childNodeList 
= rootElement.SelectNodes(xpath, m_XMLNamespaceManager);//节点集合,所有子节点
                foreach (XmlNode childNode in childNodeList)
                {
                    System.Collections.ArrayList arraylist 
= getArrlistOfANode(childNode.ChildNodes);

                    
string[] arr = (string[])arraylist.ToArray(typeof(string)); ;

                    arraylist.Clear();

                    datTable.Rows.Add(arr);
                }
            }
            
catch (XmlException ex)
            {

            }
            
return datTable;
        }
        
#endregion
    }
原创粉丝点击