В настоящее время существует множество программных инструментов XML, которые могут писать XML-документы на основе файлов XSD. Net не реализует этот метод. Поэтому я написал несколько методов для просмотра, проверки и создания XML. Весь код выглядит следующим образом:
использование системы;
использование System.Data;
использование System.Configuration;
использование System.Web;
использование System.Web.Security;
использование System.Web.UI;
использование System.Web.UI.WebControls;
использование System.Web.UI.WebControls.WebParts;
использование System.Web.UI.HtmlControls;
использование System.Xml;
использование System.Xml.Schema;
использование System.Collections;
/**//// <сводка>
/// Краткое описание ProXML
/// сводка>
общедоступный класс ProXml
{
общественныйПроXml()
{
//
// TODO: добавить сюда логику конструктора
//
}
/**//// <сводка>
/// Получить путь к файлу xsd
/// сводка>
общедоступная статическая строка GetSchemaPath
{
получать{
return HttpContext.Current.Request.PhysicalApplicationPath + «App_Data\system\publish.xsd»;
}
}
/**//// <сводка>
/// Получение узла обработки
/// сводка>
/// <возвращается>возвращается>
общедоступный статический System.Collections.Generic.List
{
XmlSchemaSet xsSet = новый XmlSchemaSet();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.Compile();
Схема XmlSchema = null;
foreach (XmlSchema xs в xsSet.Schemas())
{
схема = хз;
}
System.Collections.Generic.List
foreach (объект XmlSchemaObject в схеме.Elements.Values)
{
если (obj.GetType() == typeof(XmlSchemaElement))
{
elements.Add((XmlSchemaElement)obj);
}
}
возвратные элементы;
}
/**//// <сводка>
/// Добавляем элемент
/// сводка>
///
///
///
///
///
public static void AddElement (XmlSchemaObject sourceXsd, заголовки Hashtable, XmlDocument sourceXml, XmlNode sourceNd, значения string[])
{
if (sourceXsd.GetType() == typeof(XmlSchemaChoice))
{
Выбор XmlSchemaChoice = sourceXsd как XmlSchemaChoice;
десятичный мин = выбор.MinOccurs;
foreach (элемент XmlSchemaObject в выборе.Items)
{
если (item.GetType() == typeof(XmlSchemaElement))
{
имя строки = ((XmlSchemaElement)item).Name;
если (titles.ContainsKey(имя))
{
Элемент XmlElement = sourceXml.CreateElement(name);
// element.InnerText = ((Excel.Range)st.Cells[rowIndex, (int)titles[name]]).Value2.ToString();
element.InnerText = значения[(int)titles[name]];
sourceNd.AppendChild(элемент);
}
}
еще
{
AddElement (элемент, заголовки, sourceXml, sourceNd, значения);
}
}
}
иначе, если (sourceXsd.GetType() == typeof(XmlSchemaElement))
{
имя строки = ((XmlSchemaElement)sourceXsd).Name;
если (titles.ContainsKey(имя))
{
Элемент XmlElement = sourceXml.CreateElement(name);
element.InnerText = значения[(int)titles[name]];
sourceNd.AppendChild(элемент);
}
}
иначе, если (sourceXsd.GetType() == typeof(XmlSchemaSequence))
{
foreach (XmlSchemaObject childItem в ((XmlSchemaSequence)sourceXsd).Items)
{
если (childItem.GetType() == typeof(XmlSchemaElement))
{
имя строки = ((XmlSchemaElement)childItem).Name;
если (titles.ContainsKey(имя))
{
Элемент XmlElement = sourceXml.CreateElement(name);
element.InnerText = значения[(int)titles[name]];
sourceNd.AppendChild(элемент);
}
}
еще
{
AddElement(childItem, titles, sourceXml, sourceNd, значения);
}
}
}
еще
{
возвращаться;
}
}
/**//// <сводка>
/// Получить элементы
/// сводка>
///
/// <возвращается>возвращается>
общедоступный статический System.Collections.Generic.List
{
System.Collections.Generic.List
Элемент XmlSchemaElement = GetTableSchema(name);
если (элемент == ноль)
{
вернуть ноль;
}
XmlSchemaComplexType complex = element.SchemaType как XmlSchemaComplexType;
Последовательность XmlSchemaSequence = complex.ContentTypeParticle как XmlSchemaSequence;
foreach (объект XmlSchemaObject в последовательности.Items)
{
если (obj.GetType() == typeof(XmlSchemaElement))
{
Элемент XmlSchemaElement = (XmlSchemaElement)obj;
обр.Добавить(пункт);
}
еще
{
GetItem (обр, объект);
}
}
возврат обр;
}
public static void GetItem(System.Collections.Generic.List
{
если (obj.GetType() == typeof(XmlSchemaElement))
{
Элемент XmlSchemaElement = (XmlSchemaElement)obj;
обр.Добавить(пункт);
}
иначе, если (obj.GetType() == typeof(XmlSchemaChoice))
{
Выбор XmlSchemaChoice = объект как XmlSchemaChoice;
foreach (дочерний элемент XmlSchemaObject в выборе.Items)
{
если (child.GetType() == typeof(XmlSchemaElement))
{
Элемент XmlSchemaElement = дочерний элемент как XmlSchemaElement;
обр.Добавить(пункт);
}
еще
{
GetItem (прибытие, дочерний);
}
}
}
иначе, если (obj.GetType() == typeof(XmlSchemaSequence))
{
Последовательность XmlSchemaSequence = объект как XmlSchemaSequence;
foreach (дочерний объект XmlSchemaObject в последовательности.Items)
{
если (child.GetType() == typeof(XmlSchemaObject))
{
Элемент XmlSchemaElement = дочерний элемент как XmlSchemaElement;
обр.Добавить(пункт);
}
еще
{
GetItem (прибытие, дочерний);
}
}
}
еще
{
возвращаться;
}
}
/**//// <сводка>
/// Получаем узел по имени узла
/// сводка>
///
/// <возвращается>возвращается>
public static XmlSchemaElement GetTableSchema (имя строки)
{
XmlSchemaSet xsSet = новый XmlSchemaSet();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.Compile();
Схема XmlSchema = null;
foreach (XmlSchema xs в xsSet.Schemas())
{
схема = хз;
}
XmlQualifiedName qf = новое XmlQualifiedName(name, " http://www.w3.org/2001/XMLSchema ");
если(схема.Элементы.Содержит(qf))
{
return (XmlSchemaElement)schema.Elements[qf];
}
вернуть ноль
}
;
static void XmlValidation (отправитель объекта, ValidationEventArgs e)
{
переключатель (e.Severity)
{
случай XmlSeverityType.Error:
выдать e.Exception;
случай XmlSeverityType.Warning:
бросить e.Exception;
}
}
/**//// <сводка>
/// Проверка dom-объекта
/// сводка>
///
/// <возвращается>возвращается>
общедоступная статическая строка CheckDataXml (документ XmlDocument)
{
XmlSchemaSet xsd = новый XmlSchemaSet();
xsd.Add("", GetSchemaPath);
doc.Schemas = xsd;
пытаться
{
doc.Validate(новый ValidationEventHandler(XmlValidation));
}
поймать (Исключение ex)
{
вернуть бывшее сообщение;
}
вернуть ноль;
}
}
http://www.cnblogs.com/eric812/archive/2006/11/01/546914.html