控制台能够显示所有导入的 XML 数据,但不能将所有信息发送到文本文件

我有以下代码从 XML 文件收集所有元素和属性并发送到控制台。这没有问题。


我想将数据发送到文本文件,但只显示第一行或最后一行。有没有人对将数据发送到 txt 文件有任何建议?


XmlDocument xmlDoc = new XmlDocument();         


xmlDoc.Load(path);

XmlNode rootNode = xmlDoc.DocumentElement;

DisplayNodes(rootNode);

Console.ReadLine();


void DisplayNodes(XmlNode node)

{

    //Print the node type, node name and node value of the node

    if (node.NodeType == XmlNodeType.Text)

    {

         Console.WriteLine(node.Value.TrimStart());    

    }

    else

    {

        Console.WriteLine(node.Name.TrimStart());

    }


    //Print attributes of the node

    if (node.Attributes != null)

    {                        

        XmlAttributeCollection attrs = node.Attributes;

        foreach (XmlAttribute attr in attrs)

        {

              Console.WriteLine(attr.Name + " " + attr.Value + "\n");

        }

    }


    XmlNodeList children = node.ChildNodes;

    foreach (XmlNode child in children)

    {

          DisplayNodes(child);

    }

}


倚天杖
浏览 85回答 2
2回答

胡说叔叔

您可以使用File类中的静态方法非常轻松地写入文本文件,因为它为您包装了流创建。首先,我们可以重写上面的方法以返回 a&nbsp;List<string>,然后可以将其写入控制台或文件或其他任何内容:public static List<string> GetNodeInfo(XmlNode node){&nbsp; &nbsp; if (node == null) return new List<string>();&nbsp; &nbsp; var nodes = new List<string>&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; node.NodeType == XmlNodeType.Text&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ? node.Value.TrimStart()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : node.Name.TrimStart()&nbsp; &nbsp; };&nbsp; &nbsp; if (node.Attributes != null)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; nodes.AddRange(node.Attributes.Cast<XmlAttribute>()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Select(attribute => $"{attribute.Name} {attribute.Value}\n"));&nbsp; &nbsp; }&nbsp; &nbsp; nodes.AddRange(node.ChildNodes.Cast<XmlNode>().SelectMany(GetNodeInfo));&nbsp; &nbsp; return nodes;}现在,我们可以使用此方法获取节点信息,然后将其写入我们想要的任何内容:List<string> nodeInfo = GetNodeInfo(myNode);// Write it to the console:Console.WriteLine(string.Join(Environment.NewLine, nodeInfo));// Write it to a file:File.WriteAllLines(myFilePath, nodeInfo);

慕沐林林

我刚刚找到了问题的答案。我使用了以下内容:使用 (FileStream f = new FileStream(fileName, FileMode.Append, FileAccess.Write)) 使用 (StreamWriter s = new StreamWriter(f))对于每个 Console.Writline 更改为s.WriteLine
打开App,查看更多内容
随时随地看视频慕课网APP