cho*_*bo2 3 c# xml asp.net asp.net-mvc
我希望用户能够将数据导出为XML文件.当然,我希望他们以后能够导入相同的XML文件,但是他们总是可以更改它,或者它可能是不同的XML文件.
所以我想验证XML文件以检查它是否采用我期望的格式.所以我想我需要像模式一样来检查它必须通过代码.
所以,如果我期待
<Root>
<Something>
<SomethingElse> </SomethingElse>
</Something>
</Root>
Run Code Online (Sandbox Code Playgroud)
我不希望其他格式在文件中,而不是我期望的格式.
另外我如何验证字段?就像说我要求标签之间必须有一些文字.如果为空,则文件无效.
那怎么能这样呢?
编辑
我决定使用XML序列化,所以我知道如果格式错误并忽略不起作用的东西,它将通过异常.但是我不确定我是否应该通过它和C#来验证每个记录,或者我应该尝试使用xml架构来完成它.
如果我想通过xml序列化的xml架构来实现它将如何工作?就像我首先做的事情,就像我在回复中看到的那样,然后将其序列化?或者我该怎么做?
Pie*_*gny 10
这是一个可用于执行此操作的代码段:
using (FileStream stream = File.OpenRead(xsdFilepath))
{
XmlReaderSettings settings = new XmlReaderSettings();
XmlSchema schema = XmlSchema.Read(stream, OnXsdSyntaxError);
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add(schema);
settings.ValidationEventHandler += OnXmlSyntaxError;
using (XmlReader validator = XmlReader.Create(xmlPath, settings))
{
// Validate the entire xml file
while (validator.Read()) ;
}
}
Run Code Online (Sandbox Code Playgroud)
发生语法错误时将调用OnXmlSyntaxError函数.
有几种方法可以验证XML文件.查看如何在Visual C#.NET中使用DTD,XDR或XSD验证XML文档
另请参阅在C#示例中针对引用的XSD验证XML
另一个很好的例子是在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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9204 次 |
| 最近记录: |