尝试在C#中向现有的XML文件写入内容

5
非常感谢您的预先帮助。
这是原始的 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>

我想在“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>

我尝试实现,但是出现了这个错误信息:

字符“:”(十六进制值为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!!!!!"); 
        }

我希望有人能指导我我的代码哪里出错了。
我稍微修改了代码。但是现在我无法将它写入到现有的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!!!!!"); 
        }
4个回答

5

这是错误的:

 writer.WriteStartElement("my:Incident");

这是正确的:

 writer.WriteStartElement("Incident", "blablablaSpace:my");

编辑:

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

我已经修复了错误,但现在无法将其写入现有的XML文件。 - yyc2001
@yyc2001 这是什么意思?我希望你没有字面上使用我写的内容 :) - FailedDev
@FailedDec 不是的,我修改了我的帖子以展示我的更新代码。 - yyc2001
@yyc2001 我的是什么?它不是类似于xmlns:my="foo.html.com"这样的东西吗? - FailedDev
我的是原始XML文件中的一个命名空间。 xmlns:my =“http://schemas.microsoft.com/office/infopath/2003/myXSD/2005-09-22T20:42:56” - yyc2001
@FailedDec 谢谢。然而我仍然无法写入文件。我不确定哪里出错了。 - yyc2001

2
这里有几个问题。首先,您的“原始XML”无效,因为您没有定义“my”命名空间。要么您没有显示完整的XML文件,要么您手动编写了无效的XML。不要这样做。
“我无法将其写入现有的XML文件。”是什么意思?它会抛出异常吗?什么异常?或者您的文件在运行代码后未更改?这并不奇怪,因为您的代码实际上没有做任何事情。
XDocument doc = XDocument.Load(fileName);

这将从磁盘加载您的XML文件...然后不会对其进行任何更改。它不会改变文件。
XElement demoNode = new XElement("SummaryDescription", "Test Test");

这将创建一个新的XML元素,与 doc 、原始文件或任何其他内容都没有关联...然后将其丢弃而不对其进行任何操作。您没有将其添加到任何位置或保存到文件中。

我想在 my:Incident 下添加其他字段

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

XElement e = doc.Descendants(XName.Get("Incident", nameSpace)).FirstOrDefault<XElement>();

将您的新元素添加到其中:
if (e != null)
{
    e.Add( new XElement(XName.Get("SummaryDescription", nameSpace), "Test Test") );
}

然后保存修改后的文档。

doc.Save(fileName);

1

你的“my:”前缀是一个命名空间。你必须使用TagName =“Incident”,Namespace =“my”。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接