現在、XSD ファイルに基づいて XML ドキュメントを作成できる XML ツール ソフトウェアが多数ありますが、.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
{
publicProXml()
{
//
// TODO: ここにコンストラクター ロジックを追加します
//
}
/**//// <概要>
/// xsd ファイルのパスを取得する
/// 概要>
パブリック静的文字列 GetSchemaPath
{
得る{
return HttpContext.Current.Request.PhysicalApplicationPath + "App_Data\system\publish.xsd";
}
}
/**//// <概要>
/// 処理ノードの取得
/// 概要>
/// <戻り値>戻り値>
public static System.Collections.Generic.List
{
XmlSchemaSet xsSet = 新しい XmlSchemaSet();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.Compile();
XmlSchema スキーマ = null;
foreach (xsSet.Schemas() の XmlSchema xs)
{
スキーマ = xs;
}
System.Collections.Generic.List
foreach (schema.Elements.Values の XmlSchemaObject obj)
{
if (obj.GetType() == typeof(XmlSchemaElement))
{
elements.Add((XmlSchemaElement)obj);
}
}
要素を返します。
}
/**//// <概要>
/// 要素を追加
/// 概要>
///
///
///
///
///
public static void AddElement(XmlSchemaObject sourceXsd、ハッシュテーブルのタイトル、XmlDocument sourceXml、XmlNode sourceNd、string[] 値)
{
if (sourceXsd.GetType() == typeof(XmlSchemaChoice))
{
XmlSchemaChoice の選択 = sourceXsd as XmlSchemaChoice;
10 進数の最小値 = Choice.MinOccurs;
foreach (choice.Items の XmlSchemaObject 項目)
{
if (item.GetType() == typeof(XmlSchemaElement))
{
文字列名 = ((XmlSchemaElement)item).Name;
if (titles.ContainsKey(name))
{
XmlElement 要素 = sourceXml.CreateElement(name);
// element.InnerText = ((Excel.Range)st.Cells[rowIndex, (int)titles[name]]).Value2.ToString();
element.InnerText = 値[(int)タイトル[名前]];
ソースNd.AppendChild(要素);
}
}
それ以外
{
AddElement (項目、タイトル、sourceXml、sourceNd、値);
}
}
}
else if (sourceXsd.GetType() == typeof(XmlSchemaElement))
{
文字列名 = ((XmlSchemaElement)sourceXsd).Name;
if (titles.ContainsKey(name))
{
XmlElement 要素 = sourceXml.CreateElement(name);
element.InnerText = 値[(int)タイトル[名前]];
ソースNd.AppendChild(要素);
}
}
else if (sourceXsd.GetType() == typeof(XmlSchemaSequence))
{
foreach (((XmlSchemaSequence)sourceXsd).Items の XmlSchemaObject childItem)
{
if (childItem.GetType() == typeof(XmlSchemaElement))
{
文字列名 = ((XmlSchemaElement)childItem).Name;
if (titles.ContainsKey(name))
{
XmlElement 要素 = sourceXml.CreateElement(name);
element.InnerText = 値[(int)タイトル[名前]];
ソースNd.AppendChild(要素);
}
}
それ以外
{
AddElement(childItem、タイトル、sourceXml、sourceNd、値);
}
}
}
それ以外
{
戻る;
}
}
/**//// <概要>
/// 要素を取得する
/// 概要>
///
/// <戻り値>戻り値>
public static System.Collections.Generic.List
{
System.Collections.Generic.List
XmlSchemaElement 要素 = GetTableSchema(name);
if (要素 == null)
{
null を返します。
}
XmlSchemaComplexType complex = element.SchemaType as XmlSchemaComplexType;
XmlSchemaSequence シーケンス = complex.ContentTypeParticle as XmlSchemaSequence;
foreach (sequence.Items 内の XmlSchemaObject obj)
{
if (obj.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement 項目 = (XmlSchemaElement)obj;
arr.Add(項目);
}
それ以外
{
GetItem(arr, obj);
}
}
arrを返します。
}
public static void GetItem(System.Collections.Generic.List
{
if (obj.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement 項目 = (XmlSchemaElement)obj;
arr.Add(項目);
}
else if (obj.GetType() == typeof(XmlSchemaChoice))
{
XmlSchemaChoice の選択 = obj as XmlSchemaChoice;
foreach (choice.Items の XmlSchemaObject 子)
{
if (child.GetType() == typeof(XmlSchemaElement))
{
XmlSchemaElement item = XmlSchemaElement としての子;
arr.Add(項目);
}
それ以外
{
GetItem(arr, child);
}
}
}
else if (obj.GetType() == typeof(XmlSchemaSequence))
{
XmlSchemaSequence シーケンス = obj as XmlSchemaSequence;
foreach (sequence.Items 内の XmlSchemaObject の子)
{
if (child.GetType() == typeof(XmlSchemaObject))
{
XmlSchemaElement item = XmlSchemaElement としての子;
arr.Add(項目);
}
それ以外
{
GetItem(arr, child);
}
}
}
それ以外
{
戻る;
}
}
/**//// <概要>
/// ノード名に基づいてノードを取得します
/// 概要>
///
/// <戻り値>戻り値>
public static XmlSchemaElement GetTableSchema(文字列名)
{
XmlSchemaSet xsSet = 新しい XmlSchemaSet();
xsSet.Add(" http://www.w3.org/2001/XMLSchema ", GetSchemaPath);
xsSet.Compile();
XmlSchema スキーマ = null;
foreach (xsSet.Schemas() の XmlSchema xs)
{
スキーマ = xs;
}
XmlQualifiedName qf = new XmlQualifiedName(name, " http://www.w3.org/2001/XMLSchema ");
if(schema.Elements.Contains(qf))
{
return (XmlSchemaElement)schema.Elements[qf];
}
null を返します
。
static void XmlValidation(オブジェクト送信者、ValidationEventArgs e)
{
スイッチ (e.重大度)
{
XmlSeverityType.Error の場合:
e.Exception をスローする;
case XmlSeverityType.Warning:
e.Exception をスローします。
}
}
/**//// <概要>
/// dom オブジェクトを検証する
/// 概要>
///
/// <戻り値>戻り値>
パブリック静的文字列 CheckDataXml(XmlDocument doc)
{
XmlSchemaSet xsd = 新しい XmlSchemaSet();
xsd.Add("", GetSchemaPath);
doc.Schemas = xsd;
試す
{
doc.Validate(new ValidationEventHandler(XmlValidation));
}
catch (例外例)
{
ex.Message を返します。
}
null を返します。
}
}
http://www.cnblogs.com/eric812/archive/2006/11/01/546914.html