【发布时间】:2014-04-14 19:42:42
【问题描述】:
我已经完成了SEPA xml文件序列化和反序列化所需的类结构。
我可以根据需要将 xml 文件写入本地驱动器。
当 xml 文件写入我的本地驱动器时,我不能将文档头文件更改为下面的“必需”版本:
必填:
实际:
所以你可以看到我需要什么以及我得到的实际输出。我现在将向您展示我的 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 文件,但是从上面的“实际”文档标题中可以看到,我有一个额外的 xmlns...我尝试使用“”空白,但它不允许。
我只在此处附加了“文档”类,因为它是主要父类,我没有包括所有子类,因为它们工作正常。我希望这能澄清一切?
非常感谢您的任何帮助。
【问题讨论】: