0

XML に問題があり、XML ファイルにいくつかの情報を書き込んでいます。
XML を記述したいくつかの xsd ファイルを取得しました。etcで1つの大きな.csファイルを作成しました"xsd/c testfile1.xsd testFile2.xsd..."。そして、すべてがうまくいき、見栄えがよくなりました。
しかし、作成したクラス、つまりtestfile1.xsdを1つ取得する "<xs:complexType name="Header">"と、その中に通常の xs:element などがありますが、これもあります"<xs:attribute name="version" default="1.0.0.0"/>"。これは次のように翻訳されます。

"public Header() {
 this.versionField = "1.0.0.0";}" 

生成されたクラス「ヘッダー」で。そして、このフィールドも取得しました:private string versionField;

. (もちろん、他にもいくつかのプライベート フィールドがありますが、それらはうまく機能します。) そこで、すべてのクラスのインスタンスを作成し、それらにデータを入力して、次のように XML ファイルとして書き込みます。

 - XmlSerializer XmlSerRoot = new XmlSerializer(typeof(RootInformation))
   (the root of my xml!) 
 - StringWriterWithEncoding strWriter = new StringWriterWithEncoding(Encoding.GetEncoding("iso-8859-1"));
 - XmlDocument documentInXML = new XmlDocument();
 - XmlSerRoot.Serialize(strWriter, rootInformation); (Here is the XML, filled with values, and the Header.version got the value 1.0.0.0) 
 - string XmlString;
 - XmlString = strWriter.ToString(); (Here I can look at the created xml when debugging in VS and now the version-information is gone)
 - documentInXML.LoadXml(XmlString);
 - documentInXML.Save(myPath);


しかし、xml ファイルを見ると、これ<Header>にはバージョンのようなものはありません。私は次のようになりたい:<Header version="1.0.0.0">
私は次のようなコードでそれをやろうとさえしました:

Header header = new Header(); 
header.version = header.version; 
and
with header.version = "1.0.0.0";

ただし、タグにはバージョン テキストはありません。他のすべてのタグは値を取得しました。これだけで、<Header>この余分な情報が失われます。
誰かがヒントを得ましたか?これが機能するために必要な場所がたくさんあります。他のすべては正常に機能しています。

よろしく、 /E

これがサンプルコードの一部です:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;
using System.Xml;
namespace TestAppXML
{
    class Program
    {
        static void Main(string[] args)
        {
            RootInfo rootInfo = new RootInfo();
            rootInfo.RootText = "This is the Root!";
            Header header = new Header();
            header.TestHeader = "This is HeaderText!";
            rootInfo.Header = header;
            XmlSerializer XmlSerRoot = new XmlSerializer(typeof(RootInfo));
            StringWriterWithEncoding strWriter = new StringWriterWithEncoding(Encoding.GetEncoding("iso-8859-1"));
            XmlDocument documentInXML = new XmlDocument();
            XmlSerRoot.Serialize(strWriter, rootInfo);
            string XmlString;
            XmlString = strWriter.ToString();
            documentInXML.LoadXml(XmlString);
            strWriter.Close();
            documentInXML.Save(@"C:\TestXml.xml");
        }
    }

    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://acme.com")]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://acme.com", IsNullable = false)]
    public partial class RootInfo
    {
        private Header headerField;
        private string rootTextField;
        public Header Header
        {
            get { return this.headerField; }
            set { this.headerField = value; }
        }

        [System.Xml.Serialization.XmlElementAttribute(DataType = "normalizedString")]
        public string RootText
        {
            get { return this.rootTextField; }
            set { this.rootTextField = value; }
        }
    }

        [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
        [System.SerializableAttribute()]
        [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.ComponentModel.DesignerCategoryAttribute("code")]
        [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://acme.com")]
        public partial class Header
        {
            private string testHeaderField;
            private string versionField;
            public Header()
            {
                this.versionField = "1.0.0.0";
            }

            /// <remarks/>
            [System.Xml.Serialization.XmlElementAttribute(DataType = "normalizedString")]
            public string TestHeader
            {
                get { return this.testHeaderField; }
                set { this.testHeaderField = value; }
            }

            [System.Xml.Serialization.XmlAttributeAttribute()]
            [System.ComponentModel.DefaultValueAttribute("1.0.0.0")]
            public string version
            {
                get { return this.versionField; }
                set { this.versionField = value; }
            }
        }
        class StringWriterWithEncoding : StringWriter
        {
            private Encoding MyEncoding;
            public StringWriterWithEncoding(Encoding encoding)
                : base()
            {MyEncoding = encoding;}
            public override Encoding Encoding
            {
                get{return MyEncoding;}
            }
        }
    }
4

1 に答える 1

0

気にしないでください、私は問題を知っていると思います。これは、この xsd.exe がこれらのフィールドの 'DefaultValueAttribute' を作成するためです。これにより、このフィールドが xml に含まれなくなります。たぶん、いくつかの xsd-switch でそれができたのかもしれませんが、わかりません...

于 2013-04-09T16:37:35.263 に答える