繁体   English   中英

读取XML文件以获取所有子节点

[英]Reading XML File to get all Child Nodes

我有一个类似于以下内容的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>

我正在为此和该软件使用的其他一些XML编写Windows Form GUI。 我可以在其他XML中获取/设置,因为它们具有节点名,但是此文件(最初创建时)的制作方式有所不同。

我需要以字符串的形式获取每一行,以便随后将其拆分并在屏幕上显示所需的内容(键/类型/位置/值)。 然后,我需要使用更新后的信息来更新文件。

我在以下方面寻求帮助:

  • 检索<locations>所有节点属性

  • 清除<locations>所有节点,然后将具有属性的节点添加回去,以便考虑所有可能情况(删除/添加/更新记录)等

您可以使用XmlReader为您完成工作。

像这样的东西;

        XmlReader reader = new XmlReader(filepath)

        string s = "";

        while(reader.Read())
        {
              if(reader.HasAttributes)
              {
               s  = reader["attributename"].Value;
              }
         }

由于我是从手机上键入的,因此无法保证它将编译。

之后,您可以使用存储的值并使用XmlWriter将数据写入文件。

我还想指出,如果您要处理大量数据,则XmlReader可能是XmlReader的方法。 使用XmlDocument会将整个文档加载到RAM中,这可能会导致性能问题。 XmlReader将使用比XmlDocument更少的内存来流式传输数据。

我建议您只在名称空间System.Xml.Serialization使用XmlSerializer类。 您可以使用Microsoft定义的属性。 然后,您可以轻松地将XML序列化和反序列化为您的结构或类。

System.Xml.Linq命名空间查看XDocument 与较早的XmlDocument类相比,它是用于处理XML文档的较新API。 XmlDocumentXmlReader相比,在常见情况下使用起来非常容易。 用法示例:

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");
    .....
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM