2009-12-30 7 views
0

У меня есть кусок xml-данных, которые выходят из базы данных, которые мне нужны для создания xsd. Все это работает с помощью xsd.exe, но все элементы отображаются как строка, даже такие вещи, как 2079.0200. Как заставить xsd.exe угадывать типы? Может ли класс XmlSchemaExporter сделать это?Каков наилучший способ автоматизации генерации xsd с учетом образца xml?

Проблема заключается в том, что Visual Studio генерирует xsd, который я хочу (с десятичными типами и т. Д.), Когда я использую команду XML -> Create Schema, но я не хочу этого делать вручную. Я настраиваю процесс, который занимает кусок xml и генерирует XSD. Но он должен иметь больше типов, чем просто «строка».

Связанные, но не знаю, если это решение еще (XmlSchemaInference класс): Any tools to generate an XSD schema from an XML instance document?

ответ

0

Ответ Джона действителен для ситуаций, когда точность важнее скорости. Для моей ситуации мне понадобилось много схем, которые были идентичны тому, что было бы создано с помощью команды VS «Create Schema». Таким образом, точность не так важна, как сопоставление известной базовой линии и скорости.

Это то, что я закончил делать. Он произвел выход идентичной команды VS «Создать схему»:

XmlSchemaInference inf = new XmlSchemaInference(); 

// xml variable on the next line is a string being passed in 
XmlSchemaSet schemas = inf.InferSchema(new XmlTextReader(xml, XmlNodeType.Element, null)); 
schemas.Compile(); 

XmlSchema[] schemaArray = new XmlSchema[1]; 
schemas.CopyTo(schemaArray, 0); 
XmlTextWriter wr = new XmlTextWriter(xsdOutputFileNameAndPath, Encoding.UTF8); 
wr.Formatting = Formatting.Indented; 
schemaArray[0].Write(wr); 
wr.Close(); 
0

Решение для создания схемы вручную, на основе одного, который был сгенерирован. Затем не запускайте XSD.EXE еще раз.

+0

Visual Studio удается сформировать схему, я хочу на основе выборки из XML, так что «сделать это вручную» не хороший ответ. Интересно, могу ли я подключиться к Visual Studio ... – jcollum

+0

Visual Studio вызывает .NET API, который догадывается о схеме. Вам не нужно гадать - вы знаете, какова должна быть схема. Поэтому используйте свои знания, чтобы исправить схему, чтобы быть правильной. Обратите внимание, что XSD.EXE/Visual Studio также не может догадаться, является ли элемент обязательным, или каковы пределы его возникновения, или структура наследования или отсутствующие атрибуты и т. Д. Вы не можете зависеть от выводимой схемы. –

+0

У меня есть 40+ из них для создания, и они не должны быть супер точными. Похоже, XmlSchemaInference будет делать то, что мне нужно, или, по крайней мере, это направление, в котором я собираюсь. – jcollum