2011-04-19 114 views
5

如何從xsd生成xml 而不使用xsd.exe使用c將xsd轉換爲xml#

+0

應該是什麼樣的XML,只是虛擬數據? – vittore 2011-04-19 11:05:05

+0

你有沒有上過搜索嗎? – sehe 2011-04-19 11:05:27

+5

爲什麼你不能使用xsd.exe? – JefClaes 2011-04-19 11:05:34

回答

12

我想我爲你搜索它。從MSDN

使用示例使用XmlSampleGenerator

XmlTextWriter textWriter = new XmlTextWriter("po.xml", null); 
textWriter.Formatting = Formatting.Indented; 
XmlQualifiedName qname = new XmlQualifiedName("PurchaseOrder",  
          "http://tempuri.org"); 
XmlSampleGenerator generator = new XmlSampleGenerator("po.xsd", qname); 
genr.WriteXml(textWriter); 
+0

對不起,但您有其他想法嗎?我無法使用XMLSampleGenerator。 – kipregel 2011-04-19 12:28:25

+0

你甚至看起來? XmlSamplegenerator!= xsd.exe,適用於初學者。請注意,單詞MSDN是超鏈接... [XmlSamplegenerator源代碼](http://msdn.microsoft.com/en-us/library/aa302296.aspx) – sehe 2011-04-19 13:02:24

+0

謝謝你的這個例子,只是我需要。我不想將xsd或xml存儲在磁盤上。 – 2012-05-04 11:35:55

3

的問題已經解決了。

private void CreateXML(XmlNode xsdNode, XmlElement element, ref XmlDocument xml) 
    { 
     if (xsdNode.HasChildNodes) 
     { 
      var childs = xsdNode.ChildNodes; 
      foreach (XmlNode node in childs) 
      { 
       XmlElement newElement = null; 
       if (node.Name == "xs:element") 
       { 
        newElement = xml.CreateElement(node.Attributes["name"].Value); 
        CreateXML(node, newElement, ref xml); 
        if (element == null) 
         xml.AppendChild(newElement); 
        else 
         element.AppendChild(newElement); 
       } 
       if (node.Name == "xs:attribute") 
       { 
        element.SetAttribute(node.Attributes["name"].Value, ""); 
       } 
       if ((node.Name == "xs:complexType") || (node.Name == "xs:sequence") || (node.Name == "xs:schema")) 
        CreateXML(node, element, ref xml); 
      } 
     } 
    } 

如何,使用

XmlDocument xsd = new XmlDocument(); 
xsd.Load(xsdFileName); 
XmlNode xsdNode = xsd.DocumentElement; 
XmlElement element = null; 
XmlDocument xml = new XmlDocument(); 
CreateXML(xsdNode, element, ref xml);