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

解决方案 »

  1.   

    为什么用正则呢?
    应该是xsd
      

  2.   

    谢谢
    xsd是一种方案,但不是万能
    比如:我随便给你一字符串你怎么验证它是正确格式的xml,如果不是那错在哪里,又怎么找出来(没办法,有人要求这么做),xsd好像做不到正则应用更广泛一些,大家帮一下看看怎么写这个表达式
    我的大致方案是:
    1、匹配所有'<' '>'中间的内容,对匹配出来的内容进行第二轮匹配,即找出 '<' '>'中间的语法错误
    2、匹配所有'>' '<'中间的内容,对匹配出来的内容进行第二轮匹配,找出其语法错误,主要是不能有'<'、'>'等符号的出现
      

  3.   

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

  4.   

    除了xsd之外,还有没有其他的方案
      

  5.   

    如果你要判断一个字符串是否符合XML规范
    你可以使用XmlReader
      

  6.   


    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));
    }
    大致就是这样了
    XML已经有很成熟的类供你使用
    不要什么东西都想到正则
      

  7.   

    我早用的就是.net自带的xml验证方法,达不到我的要求,只能判断对与错,找不到出错位置说一下我做这个的目的:
       我的xml文档是通过编辑自动生成的,在编辑过程中可能会出些异常而没发觉,导致文档不能保存,
       由于文档太大,要是去找出错原因的话太浪费时间精力,所以想做这么一个方法辅助文档编辑,
       其实就是一个检查功能,直接锁定出错位置,跟编程过程中自动提示出错有些类似.
      

  8.   

    我早用的就是.net自带的xml验证方法,达不到我的要求,只能判断对与错,找不到出错位置 
    -------->谁告诉你XmlReader不能检查出来出错位置??
    ValidationCallBack方法里面的代码你没看到么?你测试过没有???贴出来你的代码和XML片段