1

私は XSD を持っています ( http://web.rete.toscana.it/eCompliance/portale/dispatcher?from=rfc&pathname=%2Fapps%2Ftsf%2Fdata%2FeCompliance%2FeCRepository%2Frfc%2F0098で定義されている標準の RFC xsd です) .06%2F98.6.zip ) と

<complexType name="EventoClinico">
    ...
    <sequence>
...
        <element name="Corpo" type="sisrt:Corpo" minOccurs="0" />
    </sequence>
        ...
</complexType>

そして「コーポ」は

<complexType name="Corpo">
    <sequence>
        <any namespace="##any" processContents="lax" />
    </sequence>
</complexType>

xsd.exe ツールは Corpo 要素を

public XmlElement Corpo;

財産。

質問は:

カスタムクラスでプロパティを埋めるにはどうすればよいですか:

public class Example{

public string AString {get;set;}
}

EventoClinico.Corpo = new Example("a string"); を設定するにはどうすればよいですか?

多くの点。

フランチェスコ。

以下の投稿で提案されている解決策を次に示します。

public XmlElement Convert<TObj>(TObj obj) { 
        XmlSerializer s = new XmlSerializer(typeof(TObj)); 
        StringBuilder sb = new StringBuilder();
        XmlWriterSettings settings= new XmlWriterSettings();
        //settings.ConformanceLevel=ConformanceLevel.Fragment;
        settings.OmitXmlDeclaration=true;
        XmlWriter w = XmlWriter.Create(sb, settings);
        s.Serialize(w, obj); 
        return ToXmlElement(sb.ToString());
    }

    public XmlElement ToXmlElement(string xml)
    {
        XmlDocumentFragment frag = new XmlDocument().CreateDocumentFragment();
        frag.InnerXml = xml;
        return frag.FirstChild as XmlElement;
    }
4

2 に答える 2

1

anyは厳密に定義された型ではないため、xsd.exe はそのための XmlElement を生成します。

http://msdn.microsoft.com/en-us/library/2w8zbwa2(v=vs.80).aspx

そこに値を入れたい場合は、Attributes および ChildNodes コレクションを使用する必要があります。

XmlElement からテスト クラスを継承させ、そのプロパティの get と set を使用して、ChildNodes と Attributes をメンバー データと同期させることができます。

public class Example : XmlElement {

public string AString {
    get { return GetAttribute("astring"); }

    set { SetAttribute("astring", value); }
}

}
于 2011-11-14T19:36:24.820 に答える
0

うーん...スキーマに何か問題があるようです。type="sisrt:Corpo" は type="Corpo" である必要があると思います (<complexType name="Corpo"> として定義されているため)?

また、EventoClinico と Corpo が異なる .xsd ファイルで定義されている場合は、 <xs:include schemaLocation="anotherfile.xsd" /> ディレクティブを使用する必要がある場合があります。

于 2011-11-14T17:08:46.340 に答える