2010-11-15 38 views
1

是否有一種「標準」方式將此類轉換爲一組C#類?如何將此XML定義轉換爲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#的方法。

回答

1

如果使用this w3c tool將DTD轉換爲XSD模式,則可以使用xsd.exeXML Sample Code Generator來創建類。

+0

謝謝,我完全需要將此DTD首先轉換爲XSD。我還發現這個工具:http://www.syntext.com/products/dtd2xs/ – Rudi 2010-11-16 09:08:37

+0

@Rudi http://www.syntext.com/products/dtd2xs/找不到,有什麼替代方法? – Kiquenet 2017-10-30 13:04:25

+0

https://www.w3.org/2000/04/schema_hack/ *** w3c工具***需要'Perl'? – Kiquenet 2017-10-30 13:05:49

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

你的意思是根據這些數據生成這個類的一個實例,或者從這個數據生成一個類定義?對於後者,您可以使用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,參數是一個包含Name,Value,Run等成員的類。 x.Descendants讓你得到它們是一個名爲Parameter的節點的根節點的子節點。您可以訪問屬性值,並將您的成員變量設置爲與它們相等。通過這種方式,您可以獲得代表xml文件中某種特定元素的類的列表,然後可以花更少的時間解析和更多的時間。