我已完成SEPA xml文件序列化和反序列化所需的类结构。在序列化之前更改XML标题名称空间
我可以根据需要将xml文件写入本地驱动器。
我不能做的是改变文件头文件看起来像“必要”版本时,将XML文件写入到本地驱动器下面:
REQUIRED:
<文件的xmlns:的xsi = “http://www.w3.org/2001/XMLSchema-instance” 的xmlns = “瓮:ISO:STD:ISO:20022:高科技:XSD:pain.008.001.02”>
ACTUAL :< Document xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”xmlns:xmlns =“urn:iso:std:iso:20022:tech:xsd:pain.008.001。 02“>
所以你可以看到我需要什么和我得到的实际输出。我现在将向您展示我的Document类中的代码以及我如何尝试更改标题文本。
这是XML文件的主要根源:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using SEPABuilder.FileSection;
namespace SEPAFileSection
{
[XmlRoot("Document")]
public class Document
{
#region Fields
private CstmrDrctDbtInitn _cstmrDrctDbtInitn;
#endregion
#region Constructors
public Document()
{
}
#endregion
#region Properties
/// <summary>
/// Only 1 CstmrDrctDbtInitn per document
/// </summary>
[XmlElement("CstmrDrctDbtInitn")]
public CstmrDrctDbtInitn CstmrDrctDbtInitn
{
get
{
if (_cstmrDrctDbtInitn == null)
_cstmrDrctDbtInitn = new CstmrDrctDbtInitn();
return _cstmrDrctDbtInitn;
}
set
{
_cstmrDrctDbtInitn = value;
}
}
#endregion
#region Methods
#endregion
}
}
一些我从这个网站,试图解决这个问题,引用的例子是:
How can I skip xml declaration when serializing? Including xmlns in my XML file
...这是我试图在查看这些示例后更改标题文本的代码摘录:
SEPAFileSection.Document doc = new SEPAFileSection.Document();
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
XNamespace ns1 = "http://www.w3.org/2001/XMLSchema-instance";
namespaces.Add("xsi", ns1.ToString());
XNamespace ns2 = "urn:iso:std:iso:20022:tech:xsd:pain.008.001.02";
namespaces.Add("xmlns",ns2.ToString());
//namespaces.Add(string.Empty,ns.ToString());
XmlSerializer serializer = new XmlSerializer(typeof(SEPAFileSection.Document));
using (TextWriter writer = new StreamWriter(@"C:\Xml.txt"))
{
serializer.Serialize(writer, doc, namespaces);
}
所以,上面的代码写出我的XML文件很好,但是从上面的'ACTUAL'文档头部可以看到,我有一个额外的xmlns ...我试图使用“”空白但它不允许它。
我在这里只附加了'文档'类,因为它是主要的父类,我没有包含所有的子类,因为它们工作正常。我希望这能澄清一切?
非常感谢您的任何帮助。
可能的重复[如何使用XMLSerializer添加没有前缀的默认名称空间](http://stackoverflow.com/questions/2500111/how-do-i-add-a-default-namespace-with-no -prefix-使用-XmlSerializer的) – flup