二度xml<一>

又一次学习Xml,之前差不多都忘了,为了下半年的面试,为了工作重头来过。。。。。。。

其实我觉得直接上代码来的更实际点,理论的东西,我们随便找点书看看就行。

下面的代码是为了打印出一个xml文件

xml文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<books>
  <book>
    <title title="nimei" >beginning with C# 4.0</title>
    <author>Karli Waton</author>
    <!-- nijsfsajfsaf-->
    <code>7865</code>
  </book>
</books>

  代码如下:

public void LoadXmlFileAndPrint()
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("../../testXml2.xml");
            XmlNode node= xmlDoc.DocumentElement;
           // string result=Print( node, "","");
            string result = LoopFunctionGetResult(node,"");
            Console.Write(result);
        }

        private string LoopFunctionGetResult(XmlNode node, string text)
        {

            //所有的Node都有类型,分为:element,comment,xmltext;而xmltext,comment是没有attribute、butes属性的,
            //所有有关xmltext和commend的操作要放到有关element操作之前

            if (node is XmlText)          //判断是否是xmltext类型
            {
                text += node.Value;
                return text;
            }

            if (node is XmlComment)       //判断是否是xmlcomment类型                     
            {
                text +=" \n <!--"+ node.Value+"-->";
                return text;
            }
            //由于xmltext和xmlcommetn的书写格式不一样,只有他们判断之后,才能写节点<...>,
            text += "\n <" + node.Name;

            if (node.Attributes.Count > 0)
            {
                AddAttributesMe(node, ref text);
            }
            if (node.HasChildNodes)
            {
                text +="> ";
                foreach (XmlNode child in node.ChildNodes)

                    //如果该节点下存在子节点,就递归调用函数(注意:返回的值也要接收)
                   text=LoopFunctionGetResult(child, text);   
               
                //如果当前节点是text or commend,加结束符号
                //if (node.ChildNodes.Count == 1 && (node.FirstChild is XmlText || node.FistChild is XmlCommend)   
              
                //{
                //    text += "</" + node.Name + ">";
                //}
                //else  (这写可以不要,写上思路更加清晰)
                    text += "  \t  \n </" + node.Name + ">";                    //非文本类型,加结束符号
            }
            return text;
        }

  顺便提提ref和out:

ref和out都是传引用而不是传值;不同之处在于:ref在传引用之前要初始化,而out不用。他们编译是完全一样的!

 

posted @ 2013-07-25 11:42  Jackvin  阅读(193)  评论(0编辑  收藏  举报