0

次のXMLを記述したいと思います。

<Fields>
    <Field name="john">lorem</Field>
    <Field name="john">lorem</Field>
    <Field name="john">lorem</Field>
</Fields>

この例に基づいて、次のXSDを作成しました。

<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Fields" type="FieldsType" />
  <xsd:complexType name="FieldsType">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" name="Field" type="FieldType" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="FieldType">
    <xsd:attribute name="name" type="xsd:string" />
  </xsd:complexType> 
</xsd:schema>

xsd.exe(VSコマンドプロンプト)を使用してクラスを生成しました。

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlRootAttribute("Fields", Namespace="", IsNullable=false)]
public partial class FieldsType {

    private FieldType[] fieldField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("Field")]
    public FieldType[] Field {
        get {
            return this.fieldField;
        }
        set {
            this.fieldField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class FieldType {

    private string nameField;

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string name {
        get {
            return this.nameField;
        }
        set {
            this.nameField = value;
        }
    }
}

これで、属性「name」を設定できるようになりました。しかし、フィールド要素間にメインテキスト値を設定するにはどうすればよいですか?例:[SET THIS TEXT]

var example = new FieldType();
example.name = "attribute value";
//how to set the element value?
4

1 に答える 1

2

をスクラップしxsd.exeてモデルを生成します。

[XmlRoot("Fields")]
public class MyViewModel
{
    [XmlElement("Field")]
    public Field[] Fields { get; set; }
}

public class Field
{
    [XmlAttribute("name")]
    public string Name { get; set; }

    [XmlText]
    public string Value { get; set; }
}

そしてそれをシリアル化します:

var model = new MyViewModel
{
    Fields = new[]
    {
        new Field { Name = "john", Value = "lorem" },
        new Field { Name = "smith", Value = "ipsum" },
    }
};
var serializer = new XmlSerializer(typeof(MyViewModel));
serializer.Serialize(Console.Out, model);
于 2013-01-31T11:50:57.550 に答える