如何将此XML定义转换为C#类

时间:2010-11-15 16:52:04

标签: c# xml xml-serialization xsd

有没有'标准'方法将这样的东西转换成一组C#类?

<!DOCTYPE MESSAGES [
<!ELEMENT MESSAGES (MSG*)>
<!ELEMENT MSG (TO+,BODY,MSG_ID,BILLING)>
<!ATTLIST MSG TYPE (CONTENT|LOGO|RINGTONE|PICTURE|OTAPUSH|BINFWD|LONGSMS|2DCODE) #REQUIRED>
<!ELEMENT TO (#PCDATA)>
<!ATTLIST TO PROVID (1|2|3|5|6|7) #IMPLIED >
<!ATTLIST TO TYPE (NPM|EMS) #IMPLIED>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT MSG_ID (#PCDATA)>
<!ELEMENT BILLING (#PCDATA)>
<!ELEMENT DELIVERY (#PCDATA)>
<!ELEMENT EXPDATE (#PCDATA)>
]>

我有更多信息,但非常感谢将ELEMENT和ATTLIST转换为C#的方法。

3 个答案:

答案 0 :(得分:3)

您是指从此数据生成此类的实例,还是从此数据生成类定义?对于后者,您可以使用XSD到C#生成器来获取保存此信息的类定义。对于前者......它更复杂。见下文。

这个数据是否在CDATA元素中?

如果是这样,将其转换为C#类的实例可能会有点困难。 如果没有,它实际上相当简单。

看看LINQ-to-XML:http://msdn.microsoft.com/en-us/library/bb387061.aspx

我使用LINQ to XML以这种方式直接将XML文件解析为类:

List<Parameter> tempList = (from param in x.Descendants("Parameter")
                              select new Parameter
                              {
                                  Name = param.Attribute("Name").Value,
                                  Value = param.Attribute("Value").Value,
                                  Run = Convert.ToBoolean(param.Attribute("Run").Value),
                                  Number = (int?) param.Attribute("Number"),
                                  Directory = param.Attribute("Directory").Value,
                                  Filename = (string)param.Attribute("Filename") ?? "None",
                                  Source = (string)param.Attribute("Source") ?? "None",
                                  FileTypes = (string)param.Attribute("FileTypes") ?? "None"
                              }).ToList();

X这里是一个XDocument,参数是一个具有Name,Value,Run等成员的类。 x.Descendants为您提供根节点的子节点,它们是名为Parameter的节点。您可以访问属性值,并将成员变量设置为等于它们。通过这种方式,您可以获得表示xml文件中某种类型的所有元素的类列表,然后可以花费更少的时间进行解析,并且花费更多时间。

答案 1 :(得分:1)

如果您可以将此DTD作为na XSD文件,那么您应该看看.Net,XSD.Exe附带的工具,它将位于您的Framework文件夹中。

我认为格式是

XSD.exe /C myXsd.xsd

以下是该工具的MSDN页面: http://msdn.microsoft.com/en-us/library/x6c1kb0s%28VS.71%29.aspx

但基本上,它根据模式定义创建类。

答案 2 :(得分:1)

如果您使用this w3c tool将DTD转换为XSD架构,则可以使用xsd.exeXML Sample Code Generator来创建类。