簡體   English   中英

堅持編輯 XML 文件

[英]Stuck at editing XML file

這里的第一篇文章.. :D 所以,我一直在編輯我的 XML 文件並添加新節點。 這是我的 XML 的樣子:

    <?xml version="1.0" encoding="utf-8"?>
    <Racuni>
    <------ I want to make new <racun> here with new data imported from list or at the end 
      <Racun>
        <datumkreiranjaracuna>20191230</datumkreiranjaracuna>
        <nazivulja>suncokretovo</nazivulja>
        <kolicinaulja>50</kolicinaulja>
        <cijenaulja>25</cijenaulja>
      </Racun>
    <------- or here :D
    </Racuni>

我要添加新的Racun之間Racuni用新的數據從列表中每一個我打開我的控制台應用程序的時間。 (這並不重要,如果它是第一個前Racun或最后一個后Racun )我只是希望它被保存在那里。

提前致謝!

編輯:

有沒有辦法改變特定的<cijenaulja> 我將整個 xml 文檔加載到列表中,然后我想更改<cijenaulja>thisvalue</cijenaulja>特定值,然后如何保存新值?

也許您應該使用XmlDocument因為處理您描述的此類任務更容易:

var xdoc = new XmlDocument();
    xdoc.LoadXml(@"
    <?xml version='1.0' encoding='utf-8'?>
    <Racuni>
    <!-- I want to make new <racun> here with new data imported from list or at the end -->
      <Racun>
        <datumkreiranjaracuna>20191230</datumkreiranjaracuna>
        <nazivulja>suncokretovo</nazivulja>
        <kolicinaulja>50</kolicinaulja>
        <cijenaulja>25</cijenaulja>
      </Racun>
    <!-- or here :D -->
    </Racuni>");

// you must use the original XmlDocument to create new elements
var racun = xdoc.CreateElement("Racun");
var dat = xdoc.CreateElement("datumkreiranjaracuna");
    dat.InnerText = "20191230";
var naz = xdoc.CreateElement("nazivulja");
    naz.InnerText = "suncokretovo";
var kol = xdoc.CreateElement("kolicinaulja");
    naz.InnerText = "50";
var cij = xdoc.CreateElement("cijenaulja");
    naz.InnerText = "25";

// now, add the created nodes into the proper places
racun.AppendChild(dat);
racun.AppendChild(naz);
racun.AppendChild(kol);
racun.AppendChild(cij);

// finally, add the new element back into the xml document
//xdoc.DocumentElement.AppendChild(racun);
xdoc.SelectSingleNode("/Racuni").AppendChild(racun);

// display the results
xdoc.Save(Console.Out);

您還應該查看CreateAttribute方法,並了解如何使用XPath定位特定元素。

歡迎使用 Stackoverflow。

從 c# 編輯 XML 的方法有多種。

XML 序列化程序

如果您有相應的模型,您可以使用 XMLSerializer 反序列化 XML 文檔,然后使用生成的模型在數據中進行更改,然后再次序列化模型。 https://docs.microsoft.com/en-us/dotnet/api/system.xml.serialization.xmlserializer?view=netframework-4.8

XPath

XPath 是一種 Navigation,如果您熟悉它,它與 JQuery 是“相似的”。 它允許您加載一個 xml 文檔,然后導航到它並更改它。

https://docs.microsoft.com/en-us/dotnet/standard/data/xml/select-nodes-using-xpath-navigation

文檔

XmlDocument 也是 XPath 的基礎,但不限於此。 您可以使用它的方法來導航和操作 XML 文檔,然后再次保存它

https://docs.microsoft.com/en-us/dotnet/api/system.xml.xmldocument?view=netframework-4.8

試試 xml linq :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            List<Racun> racuni = new List<Racun>() {
                new Racun() { 
                    datumkreiranjaracuna = DateTime.Now,
                    nazivulja = "suncokretovo",
                    kolicinaulja = 50,
                    cijenaulja = 25
                },
                new Racun() { 
                    datumkreiranjaracuna = DateTime.Now.AddDays(1),
                    nazivulja = "suncokretovo",
                    kolicinaulja = 60,
                    cijenaulja = 30
                },
                new Racun() { 
                    datumkreiranjaracuna = DateTime.Now.AddDays(2),
                    nazivulja = "suncokretovo",
                    kolicinaulja = 70,
                    cijenaulja = 35
                }
            };

            string xmlIdent = "<?xml version=\"1.0\" encoding=\"utf-8\"?><Racuni></Racuni>";

            XDocument doc = XDocument.Parse(xmlIdent);
            XElement xRacuni = doc.Root;

            foreach (Racun racun in racuni)
            {
                XElement newRacun = new XElement("Racun", new object[] {
                    new XElement("datumkreiranjaracuna", racun.datumkreiranjaracuna.ToString("yyyyMMdd")),
                    new XElement("nazivulja", racun.nazivulja),
                    new XElement("kolicinaulja", racun.kolicinaulja),
                    new XElement("cijenaulja", racun.cijenaulja)
                });
                xRacuni.Add(newRacun);
            }

            doc.Save(FILENAME);
        }
    }
    public class Racun
    {
        public DateTime datumkreiranjaracuna { get; set; }
        public string nazivulja { get; set; }
        public int kolicinaulja { get; set; }
        public int cijenaulja { get; set; }
    }
}

將代碼添加到現有文件

            XDocument doc = XDocument.Load(FILENAME);
            XElement xRacuni = doc.Root;

            foreach (Racun racun in racuni)
            {
                XElement newRacun = new XElement("Racun", new object[] {
                    new XElement("datumkreiranjaracuna", racun.datumkreiranjaracuna.ToString("yyyyMMdd")),
                    new XElement("nazivulja", racun.nazivulja),
                    new XElement("kolicinaulja", racun.kolicinaulja),
                    new XElement("cijenaulja", racun.cijenaulja)
                });
                xRacuni.Add(newRacun);
            }

            doc.Save(FILENAME);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM