zoukankan      html  css  js  c++  java
  • XmlToJSON(c#)

    using System.Text;//StringBuilder
    using System.Xml;//xml
    using System.Collections;//SortedList
    using System.Web.UI;//ClientScriptManager



      XmlDocument doc 
    = new XmlDocument();
      
    string sURL = "http://rainmeter.accu-weather.com/widget/rainmeter/weather-data.asp?location=ASI|CN|CH007|YULIN&metric=c";
      doc.Load(sURL); 
      
    string JSON = XmlToJSON(doc);
      
    // Replace \ with \\ because string is being decoded twice
      JSON = JSON.Replace(@"\"@"\\");
      
    // Insert code to process JSON at end of page
      
    // ClientScriptManager cs = Page.ClientScript;
     
    //cs.RegisterStartupScript(GetType(), "SpaceJSON", "space_processJSON('" + JSON + "');", true);



     
    private static string XmlToJSON(XmlDocument xmlDoc)
        {
            StringBuilder sbJSON 
    = new StringBuilder();
            sbJSON.Append(
    "");
            XmlToJSONnode(sbJSON, xmlDoc.DocumentElement, 
    true);
            sbJSON.Append(
    "}");
            
    return sbJSON.ToString();
        }

        
    private static void XmlToJSONnode(StringBuilder sbJSON, XmlElement node, bool showNodeName)
        {
            
    if (showNodeName)
                sbJSON.Append(
    "\"" + SafeJSON(node.Name) + "\"");
            sbJSON.Append(
    "{");
            SortedList childNodeNames 
    = new SortedList();
                
            
    if (node.Attributes != null)
                
    foreach (XmlAttribute attr in node.Attributes)
                    StoreChildNode(childNodeNames, attr.Name, attr.InnerText);

        
            
    foreach (XmlNode cnode in node.ChildNodes)
            {
                
    if (cnode is XmlText)
                    StoreChildNode(childNodeNames, 
    "value", cnode.InnerText);
                
    else if (cnode is XmlElement)
                    StoreChildNode(childNodeNames, cnode.Name, cnode);
            }

           
            
    foreach (string childname in childNodeNames.Keys)
            {
                ArrayList alChild 
    = (ArrayList)childNodeNames[childname];
                
    if (alChild.Count == 1)
                    OutputNode(childname, alChild[
    0], sbJSON, true);
                
    else
                {
                    sbJSON.Append(
    " \"" + SafeJSON(childname) + "\": [ ");
                    
    foreach (object Child in alChild)
                        OutputNode(childname, Child, sbJSON, 
    false);
                    sbJSON.Remove(sbJSON.Length 
    - 22);
                    sbJSON.Append(
    " ], ");
                }
            }
            sbJSON.Remove(sbJSON.Length 
    - 22);
            sbJSON.Append(
    " }");
        }


        
    private static void StoreChildNode(SortedList childNodeNames, string nodeName, object nodeValue)
        {
           
            
    if (nodeValue is XmlElement)
            {           
                XmlNode cnode 
    = (XmlNode)nodeValue;
                
    if (cnode.Attributes.Count == 0)
                {
                    XmlNodeList children 
    = cnode.ChildNodes;
                    
    if (children.Count == 0)
                        nodeValue 
    = null;
                    
    else if (children.Count == 1 && (children[0is XmlText))
                        nodeValue 
    = ((XmlText)(children[0])).InnerText;
                }
            }
        
            
    object oValuesAL = childNodeNames[nodeName];
            ArrayList ValuesAL;
            
    if (oValuesAL == null)
            {
                ValuesAL 
    = new ArrayList();
                childNodeNames[nodeName] 
    = ValuesAL;
            }
            
    else
                ValuesAL 
    = (ArrayList)oValuesAL;
            ValuesAL.Add(nodeValue);
        }

        
    private static void OutputNode(string childname, object alChild, StringBuilder sbJSON, bool showNodeName)
        {
            
    if (alChild == null)
            {
                
    if (showNodeName)
                    sbJSON.Append(
    "\"" + SafeJSON(childname) + "\"");
                sbJSON.Append(
    "null");
            }
            
    else if (alChild is string)
            {
                
    if (showNodeName)
                    sbJSON.Append(
    "\"" + SafeJSON(childname) + "\"");
                
    string sChild = (string)alChild;
                sChild 
    = sChild.Trim();
                sbJSON.Append(
    "\"" + SafeJSON(sChild) + "\"");
            }
            
    else
                XmlToJSONnode(sbJSON, (XmlElement)alChild, showNodeName);
            sbJSON.Append(
    "");
        }

      
        
    private static string SafeJSON(string sIn)
        {
            StringBuilder sbOut 
    = new StringBuilder(sIn.Length);
            
    foreach (char ch in sIn)
            {
                
    if (Char.IsControl(ch) || ch == '\'')
                {
                    
    int ich = (int)ch;
                    sbOut.Append(
    @"\u" + ich.ToString("x4"));
                    
    continue;
                }
                
    else if (ch == '\"' || ch == '\\' || ch == '/')
                {
                    sbOut.Append(
    '\\');
                }
                sbOut.Append(ch);
            }
            
    return sbOut.ToString();
        }


  • 相关阅读:
    截取表单提交的字符串信息转换成对象 -- 前端面试题(一)
    HTML5 简单归纳 -- 前端知识 (二)
    02_安装Linux
    01_Linux 简介
    Mysql学习笔记八:Mysql操作
    Mysql学习笔记七:常用SQL语句
    Mysql学习笔记六:事务
    Mysql学习笔记五:修改
    Mysql学习笔记四:查询
    Mysql学习笔记二:主键、外键
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/1679570.html
Copyright © 2011-2022 走看看