尝试写入C#的现有XML文件

yyc*_*001 5 c# xml

非常感谢你提前

这是原始的XML文件

<my:Incident>
       <my:Category>This is for Category</my:Category>
              <my:Status>`Status is Close`</my:Status>
       <my:Description>`This is the description part</my:Description>
</my:Incident>
Run Code Online (Sandbox Code Playgroud)

我想添加其他字段 my:Incident

这是一个例子:

<my:Incident>
       <my:Category>This is for Category</my:Category>
              <my:Status>`Status is Close`</my:Status>
       <my:SummaryDescription>This is the summary</my:SummaryDescription>
       <my:Description>`This is the description part</my:Description>
</my:Incident>
Run Code Online (Sandbox Code Playgroud)

我试图实现,但我收到此错误消息:

':'字符,十六进制值0x3A,不能包含在名称中.

public void writerXMLTest(string fileName)
        {

            if (!File.Exists(fileName))
            {
                XmlTextWriter writer = new XmlTextWriter(fileName, null);
                writer.WriteStartElement("my:Incident");
                writer.WriteEndElement();
                writer.Close();
            }

            XDocument doc = XDocument.Load(fileName);
            XElement demoNode = new XElement("my:Incident");
            demoNode.Add(new XElement("my:SummaryDescription", "Test Test"));


            Console.WriteLine("I write it!!!!!"); 
        }
Run Code Online (Sandbox Code Playgroud)

如果有人能指导我在我的代码中做错了,我将不胜感激.


我稍微修改了一下代码.但现在我无法将其写入现有的XML文件

这是我的代码:

public void writerXMLTest(string fileName)
        {

            if (!File.Exists(fileName))
            {
                XmlTextWriter writer = new XmlTextWriter(fileName, null);
                writer.WriteStartElement("Incident", "my");
                writer.WriteEndElement();
                writer.Close();
            }

            XDocument doc = XDocument.Load(fileName);
            XElement demoNode = new XElement("SummaryDescription", "Test Test");


            Console.WriteLine("I write it!!!!!"); 
        }
Run Code Online (Sandbox Code Playgroud)

Fai*_*Dev 5

这是错的:

 writer.WriteStartElement("my:Incident");
Run Code Online (Sandbox Code Playgroud)

这是正确的:

 writer.WriteStartElement("Incident", "blablablaSpace:my");
Run Code Online (Sandbox Code Playgroud)

编辑:

 writer.WriteStartElement("Incident", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2005-09-22T20:42:56:my");
Run Code Online (Sandbox Code Playgroud)


Dou*_*rch 2

这里有几个问题。首先,您的“原始 XML”无效,因为您尚未定义“my”命名空间。您可能没有向我们展示整个 XML 文件,或者您正在手动编码无效的 XML。不要那样做。

我无法将其写入现有的 XML 文件。

“我无能为力”是什么意思?它抛出异常?什么是例外?或者你的意思是你的文件在运行代码后没有改变?这并不奇怪,因为您的代码实际上没有执行任何操作。

XDocument doc = XDocument.Load(fileName);
Run Code Online (Sandbox Code Playgroud)

这会从磁盘加载您的 XML 文件...然后不对其执行任何操作。它不会更改文件。

XElement demoNode = new XElement("SummaryDescription", "Test Test");
Run Code Online (Sandbox Code Playgroud)

这会创建一个新的 XML 元素,与doc原始文件或其他任何内容完全无关……然后将其丢弃,而不对其进行任何操作。您尚未将其添加到任何地方或将任何内容保存到文件中。

我想在我的:事件下添加其他字段

如果要添加demoNode到文件中,首先必须找到节点Incident

XElement e = doc.Descendants(XName.Get("Incident", nameSpace)).FirstOrDefault<XElement>();
Run Code Online (Sandbox Code Playgroud)

将新元素添加到其中:

if (e != null)
{
    e.Add( new XElement(XName.Get("SummaryDescription", nameSpace), "Test Test") );
}
Run Code Online (Sandbox Code Playgroud)

然后保存修改后的文档

doc.Save(fileName);
Run Code Online (Sandbox Code Playgroud)