Объект XmlSchema из файла XML с встроенным Xsd - PullRequest
0 голосов
/ 28 октября 2010

В .Net я пытаюсь получить объект XmlSchema из файла Xml со встроенным Xsd и не могу узнать, как это сделать? кто-нибудь знает?

Например, если это просто Xml-файл, я могу определить схему с помощью класса XmlSchemaInference или, если это Xsd, я могу использовать класс XmlSchema, но не могу найти с помощью встроенного Xsd.

файл примера находится в http://pastebin.com/7yAjz4Z4 (по некоторым причинам здесь не будет отображаться)

Спасибо

Ответы [ 2 ]

1 голос
/ 29 октября 2010

Это можно сделать, получив XmlReader для узла элемента xs:schema и передав его 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);
            }
        }
    }
}

(Если вы используете XmlDocument вместо XDocument, посмотрите в XmlNode.CreateNavigator().ReadSubtree().)

0 голосов
/ 29 октября 2010

Я пошел на это в конце концов. Большое спасибо за вашу помощь.

            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.");
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...