正在读取XML文件以获取所有子节点
本文关键字:获取 子节点 文件 读取 XML | 更新日期: 2023-09-27 18:22:15
我有一个类似于下面的XML文件。目前,如果我想更改值,我必须进入XML并根据需要更改/添加/删除记录。
<configuration>
<locations>
<add key="1234" type="Type1" location="Default Location 1" value="10"/>
<add key="4567" type="Type2" location="Default Location 1" value="13"/>
<add key="7890" type="Type1" location="Default Location 2" value="17"/>
</locations>
</configuration>
我正在为此编写一个WindowsFormGUI,以及该软件使用的其他一些XML。我可以在其他XML中获取/putsettings,因为它们有节点名,但这个文件(最初创建时)的制作方式不同。
我需要将每一行作为一个字符串,这样我就可以将其拆分并在屏幕上显示我需要的内容(键/类型/位置/值)。然后,我需要在更新时使用信息更新文件。
我正在寻找一些帮助:
检索
<locations>
内的所有节点属性清除
<locations>
内的所有节点,然后将具有属性的节点添加回,以便考虑所有可能发生的情况(删除/添加/更新记录)等
从System.Xml.Linq
命名空间查看XDocument
。与较旧的XmlDocument
类相比,它是一个用于处理XML文档的较新的API。与XmlDocument
或XmlReader
相比,它在普通场景中非常容易使用。用法示例:
XDocument doc = XDocument.Load("path_to_xml_file.xml");
List<XElement> adds = doc.Descendants("locations").Elements("add");
foreach(XElement add in adds)
{
//get attribute of current <add> node, for example key & type attribute :
var key = (int)add.Attribute("key");
var type = (string)add.Attribute("type");
.....
}
您可以使用XmlReader为您完成工作。
像这样的东西;
XmlReader reader = new XmlReader(filepath)
string s = "";
while(reader.Read())
{
if(reader.HasAttributes)
{
s = reader["attributename"].Value;
}
}
我不能保证它会编译,因为我在手机上输入了它。
此后,您可以使用存储的值并使用XmlWriter将数据写入文件。
我还想指出,如果您正在处理大量数据,XmlReader
可能是最好的选择。使用XmlDocument
会将整个文档加载到RAM中,这可能会导致性能问题。XmlReader
将使用比XmlDocument
更少的内存来流式传输数据。
我建议您只在名称空间System.Xml.Serialization
中使用XmlSerializer
类。您可以使用属性microsoft define。然后,您可以轻松地将XML序列化和反序列化为您的结构或类。