2011-04-19 95 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);