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

标签 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# 的方法。

最佳答案

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

此数据是否位于 CDATA 元素内?

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

看一下 LINQ 到 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,Parameter是一个包含Name、Value、Run等成员的类。 x.Descendants 获取根节点的子节点,其中它们是名为 Parameter 的节点。您可以访问属性值,并将成员变量设置为等于它们。通过这种方式,您可以获得代表 xml 文件中某种特定类型的所有元素的类列表,然后可以花更少的时间进行解析,而将更多的时间花在出色的工作上。

关于c# - 如何将此 XML 定义转换为 C# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4186769/

相关文章:

c# - 如何在 .Net core exe/assembly 上运行 ildasm?

c# - 无法将参数值从SqlParameter转换为String

python - 使用 lxml 解析奇怪结构的 XML

.net - XmlSerializer 添加空 "&lt;script/>"标签到输出

c# - 将枚举序列化为 XML 属性

c# - 编写 XML 文件?

c# - 嵌入 .Net 运行时

c# - ASP.NET MVC 2 - 使用 UpdateModel 和 LINQ to Entities (.NET 3.5) 时无法更新 "The model of type ' XYZ'

xml - 更改文件中的数据

Xml 命名空间破坏了我的 xpath!