代码之家  ›  专栏  ›  技术社区  ›  Rudi

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

  •  2
  • Rudi  · 技术社区  · 14 年前

    有没有一种“标准”方法可以将类似的内容转换成一组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)>
    ]>
    

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

    3 回复  |  直到 14 年前
        1
  •  1
  •   Martin Broadhurst    7 年前

    如果您使用 this w3c tool ,您可以使用 xsd.exe XML Sample Code Generator 创建类。

        2
  •  3
  •   phyllis diller    14 年前

    您的意思是从这个数据生成这个类的一个实例,还是从这个数据生成一个类定义?对于后者,可以使用XSD-to-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();
    

    这里是一个XDocument,参数是一个具有名称、值、运行等成员的类。x、 子体获取根节点的子节点,在根节点中,它们是一个名为Parameter的节点。您可以访问属性值,并将成员变量设置为与它们相等。通过这种方式,您可以得到一个类列表,这些类表示xml文件中某种类型的所有元素,然后可以花更少的时间进行解析,花更多的时间变得棒极了。

        3
  •  1
  •   Russ Clarke    14 年前

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

    我想格式应该是

    XSD.exe /C myXsd.xsd
    

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

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