我有一个XSD文件字符串而不是路径,而XML文件字符串不是路径,如何检查XML是否在XSD文件中的正确模式中并检查错误计数并返回所有错误?
答案 0 :(得分:1)
编辑:回复评论。
我不确定抛出和异常是什么意思?
C#代码对我有效。
这就是我所做的:
1)我将代码保存到此文件中:
C:\Temp\xml_test.cs
2)我在Zeus IDE中编译了代码,它提供了以下编译器输出:
csc.exe /debug /r:System.dll; "C:\Temp\xml_test.cs"
Microsoft (R) Visual C# Compiler version 4.0.30319.18408
for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.
3)该编译创建了此xml_test.exe文件。
Directory of c:\temp
09/04/2014 09:30 AM 5,120 xml_test.exe
4)运行xml_test.exe会产生以下输出:
Data at the root level is invalid. Line 1, position 1.
现在步骤4)的输出并不奇怪,因为使用的xml是这样的:
string xmlText = "some xml string";
使用的架构如下:
string xsdText = "some xml schema string";
显然,这不是一个有效的XML字符串或XML模式,结果输出表明了这一点。
第二次编辑:
如果代码更改为使用有效的XML字符串:
// Load the xml string into a memory stream
string xmlText = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" +
"<Test>" +
"</Test>";
和匹配的架构:
// Load the schema string into a memory stream
string xsdText = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>" +
"<xs:schema attributeFormDefault=\"unqualified\" elementFormDefault=\"qualified\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">" +
" <xs:element name=\"Test\" type=\"xs:string\" />" +
"</xs:schema>";
然后,代码会在没有错误的情况下验证XML。
第三次编辑:
将此标志添加到设置中以使其调用事件处理程序而不是抛出和异常:
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
使用此标志可以在加载时验证XML,这意味着也可以删除此调用,因为它只会报告加载报告的相同错误:
document.Validate(eventHandler)
以下原帖:
这样的事情应该有效:
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Schema;
class XPathValidation
{
static void Main() {
try {
// Load the schema string into a memory stream
string xsdText = "some xml schema string";
MemoryStream xsd = new MemoryStream(Encoding.ASCII.GetBytes(xsdText));
// create a schema using that memory stream
ValidationEventHandler eventHandler = new ValidationEventHandler(Validation);
XmlSchema schema = XmlSchema.Read(xsd, eventHandler);
// create some settings using that schema
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(schema);
settings.ValidationType = ValidationType.Schema;
// Load the xml string into a memory stream
string xmlText = "some xml string";
MemoryStream xml = new MemoryStream(Encoding.ASCII.GetBytes(xmlText));
// create a XML reader
XmlReader reader = XmlReader.Create(xml, settings);
// load the XML into a document
XmlDocument document = new XmlDocument();
document.Load(reader);
// validate the XML
document.Validate(eventHandler);
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
static void Validation(object sender, ValidationEventArgs e) {
switch (e.Severity) {
case XmlSeverityType.Error:
Console.WriteLine("Error: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Warning {0}", e.Message);
break;
}
}
}