在我的应用程序中,我需要使用提供的xml文件在本地计算机上创建类似“* C:\ Laptop1 \ folder \”,“C:\ Laptop2 \ folder * ”的文件夹结构。现在,XML文件具有我所追求的文件名。
我的xml代码:
<?xml version="1.0" encoding="utf-8" ?>
<Proj>
<MachineIP>
<Machine>
<Name>Laptop 1</Name>
<Path>C:\ZipFiles\Laptop1\folder\</Path>
</Machine>
<Machine>
<Name>Laptop 2</Name>
<Path>C:\ZipFiles\Laptop2\folder\</Path>
</Machine>
<Machine>
<Name>Laptop 3</Name>
<Path>C:\ZipFiles\Laptop2\folder\</Path>
</Machine>
<Machine>
<Name>Laptop 4</Name>
<Path>C:\ZipFiles\Laptop2\folder\</Path>
</Machine>
<Machine>
<Name>Laptop 5</Name>
<Path>C:\ZipFiles\Laptop2\folder\</Path>
</Machine>
<Machine>
<Name>Laptop 6</Name>
<Path>C:\ZipFiles\Laptop2\folder\</Path>
</Machine>
</MachineIP>
</Proj>
我感兴趣的是知道如何获取机器/ 名称 / 到目前为止,我不知道如何选择特定的标签。任何人都知道如何在机器标签中选择每个名称。我有300mb文件要过滤掉。
我的方法是获取Machine标签中的每个Name并将其存储在一个字符串中,稍后使用该字符串来创建结构。但我被困了请帮忙......
到目前为止我的源代码:
//doc created
XmlDocument doc = new XmlDocument();
//loading file:
filePath = System.IO.Directory.GetCurrentDirectory();
filePath = System.IO.Path.Combine(filePath + "\\", "MyConfig.xml");
try
{
doc.Load(filePath);
}
catch (Exception ex)
{
MessageBox.Show("Config File Missing: " + ex.Message, "Config File Error",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Application.Exit();
}
//fetch data:
String[] MachineName = XMLData("PROJ/MachineIP/Machine", "Name");
String[] MachinePath = XMLData("PROJ/MachineIP/Machine", "Path");
//function XMLData():
string[] temp;
XmlNodeList nodeList = doc.SelectNodes(MainNode);
int i = 0;
temp = new string[nodeList.Count];
foreach (XmlNode node in nodeList)
{
temp.SetValue(node.SelectSingleNode(SubNode).InnerText, i);
i++;
}
return temp;
谢谢, HRG
答案 0 :(得分:1)
如果你有足够的内存来一次加载整个文件,我只使用LINQ to XML:
var document = XDocument.Load("file.xml");
var names = document.Root
.Element("MachineIP")
.Elements("Machine")
.Elements("Name")
.Select(x => (string) x)
.ToList();
如果没有有足够的内存,则需要使用XmlReader
来流式传输输入 - 尽管您可以从每个{{XElement
创建Machine
1}}要处理的元素。 (关于如何做到这一点,网络上有各种各样的页面,包括this one。代码并不是我写的方式,但一般的想法就在那里。)
答案 1 :(得分:0)
我可以把它们读成2个数组......这是我下面的代码......
//doc created
XmlDocument doc = new XmlDocument();
//loading file:
filePath = System.IO.Directory.GetCurrentDirectory();
filePath = System.IO.Path.Combine(filePath + "\\", "MyConfig.xml");
try
{
doc.Load(filePath);
}
catch (Exception ex)
{
MessageBox.Show("Config File Missing: " + ex.Message, "Config File Error",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Application.Exit();
}
//fetch data:
String[] MachineName = XMLData("PROJ/MachineIP/Machine", "Name");
String[] MachinePath = XMLData("PROJ/MachineIP/Machine", "Path");