我有我在運行時讀取的xml文件,是可以在運行時驗證xml對xsd文件嗎?使用C#可能在運行時使用代碼驗證xml是否針對xsd?
回答
試試這個:
public void ValidateXmlDocument(
XmlReader documentToValidate, string schemaPath)
{
XmlSchema schema;
using (var schemaReader = XmlReader.Create(schemaPath))
{
schema = XmlSchema.Read(schemaReader, ValidationEventHandler);
}
var schemas = new XmlSchemaSet();
schemas.Add(schema);
var settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas = schemas;
settings.ValidationFlags =
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += ValidationEventHandler;
using (var validationReader = XmlReader.Create(documentToValidate, settings))
{
while (validationReader.Read())
{
}
}
}
private static void ValidationEventHandler(
object sender, ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Error)
{
throw args.Exception;
}
Debug.WriteLine(args.Message);
}
希望這有助於鏈接:
鏈接看起來不錯,但我注意到的例子是使用一個XmlValidatingReader,這是過時的。查看股票XmlReader和XmlReaderSettings,其中包含一些驗證屬性以定義行爲。 – STW 2009-08-14 12:42:04
我得到CODE呢!我在我的測試中使用這樣的:在模式
public static bool IsValid(XElement element, params string[] schemas)
{
XmlSchemaSet xsd = new XmlSchemaSet();
XmlReader xr = null;
foreach (string s in schemas)
{ // eh, leak 'em.
xr = XmlReader.Create(
new MemoryStream(Encoding.Default.GetBytes(s)));
xsd.Add(null, xr);
}
XDocument doc = new XDocument(element);
var errored = false;
doc.Validate(xsd, (o, e) => errored = true);
if (errored)
return false;
// If this doesn't fail, there's an issue with the XSD.
XNamespace xn = XNamespace.Get(
element.GetDefaultNamespace().NamespaceName);
XElement fail = new XElement(xn + "omgwtflolj/k");
fail.SetAttributeValue("xmlns", xn.NamespaceName);
doc = new XDocument(fail);
var fired = false;
doc.Validate(xsd, (o, e) => fired = true);
return fired;
}
這其中需要作爲字符串(文件資源組件中的),並將它們添加到架構集。我驗證,如果它無效,我會返回false。
如果xml沒有被發現是無效的,我做一個否定檢查,以確保我的模式沒有搞砸。它不保證萬無一失,但我用這個來發現我的模式中的錯誤。
您可能想嘗試使用'XmlSchema.Read'方法,因爲它可以在解析模式時驗證模式。 – 2009-08-14 13:25:33
感謝您的代碼:) – BigOmar 2012-05-01 16:23:04
簡單的解決方案..
try
{
XmlReaderSettings Xsettings = new XmlReaderSettings();
Xsettings.Schemas.Add(null, "personDivideSchema.xsd");
Xsettings.ValidationType = ValidationType.Schema;
XmlDocument document = new XmlDocument();
document.Load("person.xml");
XmlReader reader = XmlReader.Create(new StringReader(document.InnerXml), Xsettings);
while (reader.Read());
}
catch (Exception e)
{
Console.WriteLine(e.Message.ToString());
}
- 1. 是否可以在Silverlight 3中針對XSD驗證XML?
- 2. 在針對XSD驗證XML時出錯
- 3. 針對XSD的XML驗證
- 4. 使用Silverlight針對XSD驗證XML?
- 5. 使用JS/jQuery驗證xml針對xsd
- 6. 使用C++驗證xml針對xsd
- 7. XSD不針對xml進行驗證
- 8. System.IO.DirectoryNotFoundException:針對XSD驗證XML時
- 9. 在純ABAP中針對XSD驗證XML
- 10. 是否可以使用xsd驗證進行Groovy xml解析?
- 11. 驗證xml是否對xsd字符串
- 12. 對xsd執行xml驗證
- 13. 無法驗證xml針對xsd
- 14. 驗證Xml針對Xsd Schema的錯誤
- 15. 針對2個XSD驗證XML
- 16. 驗證XML對XSD
- 17. 如何在運行時驗證xml是否針對xsd,而不將文件保存在本地文件夾中?
- 18. 在soapui驗證XML對XSD
- 19. 如何判斷XML文檔是否針對DTD或XSD進行驗證?
- 20. 在java中部分針對xsd進行xml驗證
- 21. Hows是否使用XSD Work進行XML驗證?
- 22. 針對W3驗證XSD XMLSchema.xsd
- 23. 使用SAXParser驗證XML針對XSD導致錯誤
- 24. eclipse:使用xsd驗證xml
- 25. 使用XML驗證XSD
- 26. 使用XSD進行XML驗證
- 27. iOS:使用XSD進行XML驗證
- 28. 使用XSD進行XML驗證
- 29. 使用XSD進行XML模式驗證
- 30. 使用XSD架構進行Xml驗證
這是我用過的最快的一個。 – 2011-12-22 13:53:41