我有一个XSD(它是http://web.rete.toscana.it/eCompliance/portale/dispatcher?from=rfc&pathname=%2Fapps%2Ftsf%2Fdata%2FeCompliance%2FeCRepository%2Frfc%2F0098.06%2F98.6.zip中定义的标准RFC xsd),带有
<complexType name="EventoClinico">
...
<sequence>
...
<element name="Corpo" type="sisrt:Corpo" minOccurs="0" />
</sequence>
...
</complexType>
和“Corpo”是
<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示例(“一个字符串”);?
许多问候。
弗朗西斯。
这是以下帖子中建议的解决方案:
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;
}
答案 0 :(得分:1)
由于任何不是严格定义的类型,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); }
}
}
答案 1 :(得分:0)
嗯...你的架构似乎有问题,我认为type =“sisrt:Corpo”shold是type =“Corpo”(因为它定义为&lt; complexType name =“Corpo”&gt;)?
此外,如果在不同的.xsd文件中定义了EventoClinico和Corpo,则可能需要使用&lt; xs:include schemaLocation =“anotherfile.xsd”/&gt;指令