二度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不用。他们编译是完全一样的!