日期:2014-05-18  浏览次数:21131 次

正则表达式验证Xml格式,急用!!!
假设有一段XMl字符串有语法错误
现在要用一正则表达式来找出其出错位置
应该怎么写?感觉挺复杂,找大家来帮忙。

------解决方案--------------------
探讨
为什么用正则呢?
应该是xsd

------解决方案--------------------
确实
------解决方案--------------------
有专业的为啥用正则表达式?
------解决方案--------------------
探讨
谢谢
xsd是一种方案,但不是万能
比如:我随便给你一字符串你怎么验证它是正确格式的xml,如果不是那错在哪里,又怎么找出来(没办法,有人要求这么做),xsd好像做不到

正则应用更广泛一些,大家帮一下看看怎么写这个表达式
我的大致方案是:
1、匹配所有' <' '>'中间的内容,对匹配出来的内容进行第二轮匹配,即找出 ' <' '>'中间的语法错误
2、匹配所有'>' ' <'中间的内容,对匹配出来的内容进行第二轮匹配,找出其语法错误…

------解决方案--------------------
xsd文件只能规定XML文件中的数据类型,取值范围等等,但是如何判断一个XML文件是不是正确好像不行吧?
------解决方案--------------------
C# code

XmlReader reader = null;
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.IgnoreComments = true;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationCallBack);
reader = XmlReader.Create(你的文件, settings);

while (reader.Read())
{
......
}

private void ValidationCallBack(object sender, ValidationEventArgs args)
{
    XmlReader reader = (XmlReader)sender;
    if (args.Severity == XmlSeverityType.Warning)
    {
        Console.WriteLine(string.Format("***Warning: {0}\n", args.Message));
    }
    else
    {
        Console.WriteLine(string.Format("***Error: {0}\n", args.Message));
    }
    Console.WriteLine(string.Format("***Value: {0}\n", reader.Value));
    Console.WriteLine(string.Format("***LineNumber: {0}\n", args.Exception.LineNumber));
}