非常感谢您提前
这是原始的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!!!!!");
}
答案 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