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

时间:2011-12-08 20:47:17

标签: 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>

我想在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 个答案:

答案 0 :(得分: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");

答案 1 :(得分: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);

答案 2 :(得分:1)

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

答案 3 :(得分:0)

Microsoft提供了有关将XmlTextWriter与命名空间一起使用的文档

http://msdn.microsoft.com/en-us/library/cfche0ka(v=vs.80).aspx