有没有'标准'方法将这样的东西转换成一组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#的方法。
答案 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.exe或XML Sample Code Generator来创建类。