Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法编辑XML文件_C#_Xml_Nodes - Fatal编程技术网

C# 无法编辑XML文件

C# 无法编辑XML文件,c#,xml,nodes,C#,Xml,Nodes,第一个帖子在这里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> <datumk

第一个帖子在这里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>


也许您应该使用
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);
var xdoc=new XmlDocument();
xdoc.LoadXml(@)
20191230
桑科克雷托沃
50
25
");
//必须使用原始XmlDocument来创建新元素
var racun=xdoc.CreateElement(“racun”);
var dat=xdoc.CreateElement(“datumkreiranjaracuna”);
dat.InnerText=“20191230”;
var naz=xdoc.CreateElement(“nazivulja”);
naz.InnerText=“suncockretovo”;
var kol=xdoc.CreateElement(“kolicinaulja”);
naz.InnerText=“50”;
var cij=xdoc.CreateElement(“cijenaulja”);
naz.InnerText=“25”;
//现在,将创建的节点添加到适当的位置
附肢儿童(dat);
racun.AppendChild(纳兹);
racun.AppendChild(kol);
racun.AppendChild(cij);
//最后,将新元素添加回xml文档中
//xdoc.DocumentElement.AppendChild(racun);
xdoc.SelectSingleNode(“/Racuni”).AppendChild(racun);
//显示结果
xdoc.Save(控制台输出);

您还应该查看类似
CreateAttribute
的方法,并了解如何使用
XPath

查找特定元素。也许您应该使用
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);
var xdoc=new XmlDocument();
xdoc.LoadXml(@)
20191230
桑科克雷托沃
50
25
");
//必须使用原始XmlDocument来创建新元素
var racun=xdoc.CreateElement(“racun”);
var dat=xdoc.CreateElement(“datumkreiranjaracuna”);
dat.InnerText=“20191230”;
var naz=xdoc.CreateElement(“nazivulja”);
naz.InnerText=“suncockretovo”;
var kol=xdoc.CreateElement(“kolicinaulja”);
naz.InnerText=“50”;
var cij=xdoc.CreateElement(“cijenaulja”);
naz.InnerText=“25”;
//现在,将创建的节点添加到适当的位置
附肢儿童(dat);
racun.AppendChild(纳兹);
racun.AppendChild(kol);
racun.AppendChild(cij);
//最后,将新元素添加回xml文档中
//xdoc.DocumentElement.AppendChild(racun);
xdoc.SelectSingleNode(“/Racuni”).AppendChild(racun);
//显示结果
xdoc.Save(控制台输出);

您还应该查看像
CreateAttribute
这样的方法,并了解如何使用
XPath
定位特定元素欢迎使用Stackoverflow

有几种方法可以从c#编辑XML

XML序列化程序 在拥有相应模型的情况下,可以使用XMLSerializer对XML文档进行反序列化,然后使用生成的模型对数据进行更改,然后再次序列化模型。

XPath XPath是一种导航类型,如果您熟悉的话,它与JQuery“类似”。您可以加载一个xml文档,然后导航到其中并对其进行修改

XML文档 XmlDocument也是XPath的基础,但不限于此。您可以使用它的方法导航和操作XML文档,然后再次保存它


欢迎来到Stackoverflow

有几种方法可以从c#编辑XML

XML序列化程序 在拥有相应模型的情况下,可以使用XMLSerializer对XML文档进行反序列化,然后使用生成的模型对数据进行更改,然后再次序列化模型。

XPath XPath是一种导航类型,如果您熟悉的话,它与JQuery“类似”。您可以加载一个xml文档,然后导航到其中并对其进行修改

XML文档 XmlDocument也是XPath的基础,但不限于此。您可以使用它的方法导航和操作XML文档,然后再次保存它

试试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; }
    }
}
试试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; }
    }
}

您能编辑您的问题并添加您遇到问题的代码吗?到目前为止,它看起来是可行的。我只使用XmlWriter创建了文件,现在我不知道如何只加载XML的第一部分,插入一些东西,然后关闭它。。。我可以复制用于创建此Xml文件的代码,如果这有助于编辑新问题,我正在尝试在将整个Xml加载到列表中时编辑该值。您可以编辑您的问题并添加遇到问题的代码吗?到目前为止,它看起来是可行的。我只使用XmlWriter创建了文件,现在我不知道如何只加载XML的第一部分,插入一些东西,然后关闭它。。。我可以复制用于创建此Xml文件的代码,如果这有助于编辑一个新问题,我将在将整个Xml加载到列表中时尝试编辑该值。我认为将新创建的元素显式添加到
Racuni
元素子元素会更好。它假定
Racuni
是根级别的容器,但可能不是。问题是,每次打开控制台应用程序时,我都需要更改代码?因为xml文档将发生更改,如果您需要保留更改,我必须编辑所加载的内容,因此您可以使用
save
方法将其保存到文件中,并使用
load
方法将其加载回该文件。因此在
xdoc.LoadXml
中,我可以使用.xml文件的路径?@NikolaStjepanović,将其替换为
xdoc.Load(path)
我认为将新创建的元素显式添加到
Racuni
元素子元素会更好。它假定
Racuni
是根级别的容器,但可能不是。问题是,每次打开控制台应用程序时,我都需要更改代码?因为xml文档将发生更改,如果您需要保留更改,我必须编辑所加载的内容,所以您可以使用
save
方法将其保存到文件中,并使用
load
方法将其加载回该文件。因此在
xdoc.LoadXml
中,我可以使用.xml文件的路径?@NikolaStje