转换 xml 个文件中的许多文本文件,保持相同的文件名 C#
Convert many text files in xml files, keeping the same file name C#
已更新 - 我正在尝试使用 C# 将大量文本文件(最多 3K 文件)转换为 XML 文件。
我想遵循两个步骤:
1)使用特定的分隔符“:”获取一些数据。
2) 使用同名的*.txt文件在另一个文件夹中创建*.xml文件。
我花了很多时间使用 LINQ 从文本文件中获取数据信息,所有数据都是正确的。我被困在如何将这些数据发送到 xml 文件并保存它。
这是我第一次使用文本文件,XML,我们将不胜感激。
代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using System.Xml.Serialization;
namespace TxT2XML
{
class Program
{
private static void Main(string[] args)
{
string path = @"C:\Users\wcks\Documents\Visual Studio 2015\Projects\TxT2XML\Data_TXT_Files\";
string[] fileEntries = Directory.GetFiles(path);
Dictionary<string, string[]> dicData = new Dictionary<string, string[]>();
foreach (string fileName in fileEntries)
{
if (!File.Exists(path))
{
string[] contents = new string[100];
string fieldDateLogged = "Date Logged:";
string fieldTaskName = "Task Name:";
string fieldUserID = "User ID:";
var lines = File.ReadAllLines(fileName);
contents[0] = lines.Where(x => x.Contains(fieldDateLogged)).FirstOrDefault().Replace(fieldDateLogged, string.Empty).Trim();
contents[1] = lines.Where(x => x.Contains(fieldTaskName)).FirstOrDefault().Replace(fieldTaskName, string.Empty).Trim();
contents[2] = lines.Where(x => x.Contains(fieldUserID)).FirstOrDefault().Replace(fieldUserID, string.Empty).Trim();
XElement xElem = new XElement(fieldTaskName, dicData.Select(x => new XElement("DataLogName", new XAttribute(fieldTaskName, x.Key), new XAttribute(contents[0], x.Value))));
var xml = xElem.ToString();
Console.Write(xml);
}
}
}
}
}
class DataLogName
{
[XmlAttribute]
public string DataLogged { set; get; }
[XmlAttribute]
public string TaskName { set; get; }
[XmlAttribute]
public string UserID { set; get; }
}
预期XML输出:
<DataLogName>
<DataLogged>01-01-2017<DataLogged>
<TaskName>Project Name<TaskName>
<UserID>123456<UserID>
<DataLogName>
文本文件示例:
SOFTWARE DATA LOG Data Log
Date Logged: 09-29-2014 02:17:45 PM
Task Name: PROJECT_NAME
User ID: Administrator Mode
System: COMPUTER_XPTO
Machine ID: XXXXXXXX
Device: XXXXXXXXXXXXXX
Data Source: c:\ROOT\FOLDER\X.BIN
Sumcheck: 5DC95067
Process: XXXXXXX/XXXXX/XXXXX/XXXXXX
非常感谢!
XElement
有一个 Save
方法,它接受一个字符串 - 一个文件的路径,其中 XElement
的内容也应该被写入。
XElement.Save
Method (String
)
Serialize this element to a file.
您可以使用它来将其保存到文件中。
您可以使用 Path.ChangeExtension
:
替换路径中的扩展名
var outputFilePath = Path.ChangeExtension(fileName, ".xml");
xElem.Save(outputFilePath);
我会使用 XmlSerializer 来保存到文件。这方面的一个例子如下所示。 XElement 可以更轻松地执行特定的操作,但对于像您这样的简单结构,我发现这种方法更简洁一些。
using System;
using System.IO;
using System.Xml.Serialization;
namespace XmlPlayground
{
public class DataLogName
{
public DateTime DateLogged { get; set; }
public string TaskName { get; set; }
public string UserId { get; set; }
}
class Program
{
static void Main(string[] args)
{
var fileName = "myfile.txt";
// TODO: Load File from text file
var dateLogged = DateTime.Now;
var taskName = "Example Task";
var userId = "Fred1";
// Populate structure
var dataToSave = new DataLogName { DateLogged = dateLogged, TaskName = taskName, UserId = userId };
// Save File
var outputFileName = Path.GetFileNameWithoutExtension(fileName);
using (var outFile = File.Create($@"SomeOtherFolder\{outputFileName}.xml"))
{
var formatter = new XmlSerializer(typeof(DataLogName));
formatter.Serialize(outFile, dataToSave);
}
}
}
}
已更新 - 我正在尝试使用 C# 将大量文本文件(最多 3K 文件)转换为 XML 文件。 我想遵循两个步骤: 1)使用特定的分隔符“:”获取一些数据。 2) 使用同名的*.txt文件在另一个文件夹中创建*.xml文件。
我花了很多时间使用 LINQ 从文本文件中获取数据信息,所有数据都是正确的。我被困在如何将这些数据发送到 xml 文件并保存它。
这是我第一次使用文本文件,XML,我们将不胜感激。
代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using System.Xml.Serialization;
namespace TxT2XML
{
class Program
{
private static void Main(string[] args)
{
string path = @"C:\Users\wcks\Documents\Visual Studio 2015\Projects\TxT2XML\Data_TXT_Files\";
string[] fileEntries = Directory.GetFiles(path);
Dictionary<string, string[]> dicData = new Dictionary<string, string[]>();
foreach (string fileName in fileEntries)
{
if (!File.Exists(path))
{
string[] contents = new string[100];
string fieldDateLogged = "Date Logged:";
string fieldTaskName = "Task Name:";
string fieldUserID = "User ID:";
var lines = File.ReadAllLines(fileName);
contents[0] = lines.Where(x => x.Contains(fieldDateLogged)).FirstOrDefault().Replace(fieldDateLogged, string.Empty).Trim();
contents[1] = lines.Where(x => x.Contains(fieldTaskName)).FirstOrDefault().Replace(fieldTaskName, string.Empty).Trim();
contents[2] = lines.Where(x => x.Contains(fieldUserID)).FirstOrDefault().Replace(fieldUserID, string.Empty).Trim();
XElement xElem = new XElement(fieldTaskName, dicData.Select(x => new XElement("DataLogName", new XAttribute(fieldTaskName, x.Key), new XAttribute(contents[0], x.Value))));
var xml = xElem.ToString();
Console.Write(xml);
}
}
}
}
}
class DataLogName
{
[XmlAttribute]
public string DataLogged { set; get; }
[XmlAttribute]
public string TaskName { set; get; }
[XmlAttribute]
public string UserID { set; get; }
}
预期XML输出:
<DataLogName>
<DataLogged>01-01-2017<DataLogged>
<TaskName>Project Name<TaskName>
<UserID>123456<UserID>
<DataLogName>
文本文件示例:
SOFTWARE DATA LOG Data Log
Date Logged: 09-29-2014 02:17:45 PM
Task Name: PROJECT_NAME
User ID: Administrator Mode
System: COMPUTER_XPTO
Machine ID: XXXXXXXX
Device: XXXXXXXXXXXXXX
Data Source: c:\ROOT\FOLDER\X.BIN
Sumcheck: 5DC95067
Process: XXXXXXX/XXXXX/XXXXX/XXXXXX
非常感谢!
XElement
有一个 Save
方法,它接受一个字符串 - 一个文件的路径,其中 XElement
的内容也应该被写入。
XElement.Save
Method (String
)Serialize this element to a file.
您可以使用它来将其保存到文件中。
您可以使用 Path.ChangeExtension
:
var outputFilePath = Path.ChangeExtension(fileName, ".xml");
xElem.Save(outputFilePath);
我会使用 XmlSerializer 来保存到文件。这方面的一个例子如下所示。 XElement 可以更轻松地执行特定的操作,但对于像您这样的简单结构,我发现这种方法更简洁一些。
using System;
using System.IO;
using System.Xml.Serialization;
namespace XmlPlayground
{
public class DataLogName
{
public DateTime DateLogged { get; set; }
public string TaskName { get; set; }
public string UserId { get; set; }
}
class Program
{
static void Main(string[] args)
{
var fileName = "myfile.txt";
// TODO: Load File from text file
var dateLogged = DateTime.Now;
var taskName = "Example Task";
var userId = "Fred1";
// Populate structure
var dataToSave = new DataLogName { DateLogged = dateLogged, TaskName = taskName, UserId = userId };
// Save File
var outputFileName = Path.GetFileNameWithoutExtension(fileName);
using (var outFile = File.Create($@"SomeOtherFolder\{outputFileName}.xml"))
{
var formatter = new XmlSerializer(typeof(DataLogName));
formatter.Serialize(outFile, dataToSave);
}
}
}
}