簡體   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