【问题标题】:How to convert this XML Definition into a C# Class如何将此 XML 定义转换为 C# 类
【发布时间】:2010-11-15 16:52:03
【问题描述】:

是否有一种“标准”方法可以将这样的内容转换为一组 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# 的方法。

【问题讨论】:

    标签: c# xml xml-serialization xsd


    【解决方案1】:

    您的意思是从该数据生成此类的实例,还是从该数据生成类定义?对于后者,您可以使用 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,Parameter是一个类,有Name、Value、Run等成员。 x.Descendants 为您获取根节点的子节点,它们是名为 Parameter 的节点。您可以访问属性值,并将您的成员变量设置为等于它们。通过这种方式,您可以获得代表 xml 文件中某种类型的所有元素的类列表,然后可以花更少的时间进行解析,而花更多的时间变得很棒。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案3】:

      如果您可以将此 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

      但基本上,它会根据架构定义创建类。

      【讨论】:

        猜你喜欢
        • 2011-02-23
        • 2014-04-15
        • 2013-02-17
        • 2016-03-24
        • 1970-01-01
        • 2013-11-05
        • 2020-06-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多