XmlDocument - 前缀''无法从''重新定义为'X'

时间:2016-01-19 16:03:03

标签: c# xmldocument

我这样做:

 var xml = new XmlDocument();
 xml.AppendChild(xml.CreateXmlDeclaration("1.0", Encoding.UTF8.BodyName, "yes"));
 var el = (XmlElement)xml.AppendChild(xml.CreateElement("Document"));           
 el.SetAttribute("xmlns", "urn:iso:std:iso:20022:tech:xsd:" + SepaSchemaUtils.SepaSchemaToString(schema));

然后我要做缩进的XML:

StringBuilder sb = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings
{
    Indent = true,
    IndentChars = "  ",
    NewLineChars = "\r\n",
    NewLineHandling = NewLineHandling.Replace
};
using (XmlWriter writer = XmlWriter.Create(sb, settings))
{
    doc.Save(writer);
}

执行doc.Save(writer)时出现异常。

  

System.Xml.XmlException:无法从''重新定义前缀''   'urn:iso:std:iso:20022:tech:xsd:pain.001.001.03'在同一个开头   元素标签。

我已经尝试过所有可以找到的东西。谢谢。

1 个答案:

答案 0 :(得分:7)

您尝试在命名空间中创建Document元素而不是,但同时设置默认命名空间。我怀疑你只是想要:

String ns = "urn:iso:std:iso:20022:tech:xsd:" + SepaSchemaUtils.SepaSchemaToString(schema);
var xml = new XmlDocument();
xml.AppendChild(xml.CreateXmlDeclaration("1.0", Encoding.UTF8.BodyName, "yes"));
var el = (XmlElement) xml.AppendChild(xml.CreateElement("Document", ns)); 
el.SetAttribute("xmlns", ns);

或者,我强烈建议使用LINQ to XML,这使得这个和许多其他任务变得更加简单。