2010-10-28 13 views
0

En .Net, j'essaie d'obtenir un objet XmlSchema à partir d'un fichier XML avec une Xsd intégrée et je ne trouve pas comment le faire? quelqu'un sait? Par exemple, si c'est juste un fichier Xml, je peux Infer Schema en utilisant la classe XmlSchemaInference ou si c'est un Xsd, je peux utiliser la classe XmlSchema, mais je ne peux pas trouver avec xsd inline.Objet XmlSchema issu d'un fichier XML avec Xsd

fichier exemple

est à http://pastebin.com/7yAjz4Z4 (pour une raison quelconque ne serait pas montrer ici)

Merci

Répondre

1

Cela peut être fait en obtenant un XmlReader pour le noeud d'élément xs:schema et passant à XmlSchema.Read.

using System; 
using System.Xml; 
using System.Xml.Linq; 
using System.Xml.Schema; 

namespace EmbeddedXmlSchema 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      XNamespace xs = "http://www.w3.org/2001/XMLSchema"; 
      XDocument doc = XDocument.Load("XMLFile1.xml"); 
      XmlSchema sch; 
      using (XmlReader reader = doc.Element("ReportParameters").Element(xs + "schema").CreateReader()) 
      { 
       sch = XmlSchema.Read(reader, null); 
      } 
     } 
    } 
} 

(Si vous utilisez XmlDocument au lieu de XDocument, regardez dans XmlNode.CreateNavigator().ReadSubtree().)

0

Je suis allé pour cela à la fin. Merci beaucoup pour votre aide.

  XmlDocument xmlDocument = new XmlDocument(); 
      xmlDocument.Load(file); 

      XmlNodeList nodes = 
       xmlDocument.GetElementsByTagName("schema", "http://www.w3.org/2001/XMLSchema"); 

      if (null != nodes && 0 != nodes.Count) 
      { 
       XmlReader reader = new XmlNodeReader(nodes[0]); 
       XmlSchema schema = XmlSchema.Read(reader, null); 

       // do stuff with schema 
      } 
      else 
      { 
       throw new InvalidOperationException("No inline schema found."); 
      }