2014-04-14 61 views
1

我已完成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 ...我试图使用“”空白但它不允许它。

我在这里只附加了'文档'类,因为它是主要的父类,我没有包含所有的子类,因为它们工作正常。我希望这能澄清一切?

非常感谢您的任何帮助。

+0

可能的重复[如何使用XMLSerializer添加没有前缀的默认名称空间](http://stackoverflow.com/questions/2500111/how-do-i-add-a-default-namespace-with-no -prefix-使用-XmlSerializer的) – flup

回答

1

除了与XmlSerializerNamespaces试试这个:

[XmlRoot(ElementName = "Document", Namespace = "urn:iso:std:iso:20022:tech:xsd:pain.008.001.02")] 
public class Document 
{ 
    ... 
} 

,并删除

XNamespace ns2 = "urn:iso:std:iso:20022:tech:xsd:pain.008.001.02"; 
namespaces.Add("xmlns",ns2.ToString()); 

注意ElementName = "Document"是多余的。

相关问题