我这样做:
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'在同一个开头 元素标签。
我已经尝试过所有可以找到的东西。谢谢。
答案 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,这使得这个和许多其他任务变得更加简单。