【问题标题】:Change XML header namespaces before Serialization在序列化之前更改 XML 标头命名空间
【发布时间】: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...我尝试使用“”空白,但它不允许。

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

非常感谢您的任何帮助。

【问题讨论】:

标签: c# xml


【解决方案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" 是多余的。

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2013-05-02
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    相关资源
    最近更新 更多