正则表达式验证Xml格式,急用!!! 假设有一段XMl字符串有语法错误现在要用一正则表达式来找出其出错位置应该怎么写?感觉挺复杂,找大家来帮忙。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为什么用正则呢?应该是xsd 谢谢xsd是一种方案,但不是万能比如:我随便给你一字符串你怎么验证它是正确格式的xml,如果不是那错在哪里,又怎么找出来(没办法,有人要求这么做),xsd好像做不到正则应用更广泛一些,大家帮一下看看怎么写这个表达式我的大致方案是:1、匹配所有'<' '>'中间的内容,对匹配出来的内容进行第二轮匹配,即找出 '<' '>'中间的语法错误2、匹配所有'>' '<'中间的内容,对匹配出来的内容进行第二轮匹配,找出其语法错误,主要是不能有'<'、'>'等符号的出现 xsd文件只能规定XML文件中的数据类型,取值范围等等,但是如何判断一个XML文件是不是正确好像不行吧? 除了xsd之外,还有没有其他的方案 如果你要判断一个字符串是否符合XML规范你可以使用XmlReader 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已经有很成熟的类供你使用不要什么东西都想到正则 我早用的就是.net自带的xml验证方法,达不到我的要求,只能判断对与错,找不到出错位置说一下我做这个的目的: 我的xml文档是通过编辑自动生成的,在编辑过程中可能会出些异常而没发觉,导致文档不能保存, 由于文档太大,要是去找出错原因的话太浪费时间精力,所以想做这么一个方法辅助文档编辑, 其实就是一个检查功能,直接锁定出错位置,跟编程过程中自动提示出错有些类似. 我早用的就是.net自带的xml验证方法,达不到我的要求,只能判断对与错,找不到出错位置 -------->谁告诉你XmlReader不能检查出来出错位置??ValidationCallBack方法里面的代码你没看到么?你测试过没有???贴出来你的代码和XML片段 关于图片存储的问题 dateset判断问题 c#类不存在构造函数的问题 怎么把自己的聊天记录转化为数组 ?(在winforms里) 请大家一起提供能下载到游戏源代码的网站 急招C#开发高手(上海) 请问C#内存分布情况,例如堆栈 全局静态区 代码区?最好有实例?多谢多谢 菜鸟问题:老是出现要求int对象的提示。 問一個關於switch語句的問題 新手问题:用Splitter控件的问题! 求助c#程序实现文件刻录到光盘,,急!!! 请教list查询
应该是xsd
xsd是一种方案,但不是万能
比如:我随便给你一字符串你怎么验证它是正确格式的xml,如果不是那错在哪里,又怎么找出来(没办法,有人要求这么做),xsd好像做不到正则应用更广泛一些,大家帮一下看看怎么写这个表达式
我的大致方案是:
1、匹配所有'<' '>'中间的内容,对匹配出来的内容进行第二轮匹配,即找出 '<' '>'中间的语法错误
2、匹配所有'>' '<'中间的内容,对匹配出来的内容进行第二轮匹配,找出其语法错误,主要是不能有'<'、'>'等符号的出现
你可以使用XmlReader
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已经有很成熟的类供你使用
不要什么东西都想到正则
我的xml文档是通过编辑自动生成的,在编辑过程中可能会出些异常而没发觉,导致文档不能保存,
由于文档太大,要是去找出错原因的话太浪费时间精力,所以想做这么一个方法辅助文档编辑,
其实就是一个检查功能,直接锁定出错位置,跟编程过程中自动提示出错有些类似.
-------->谁告诉你XmlReader不能检查出来出错位置??
ValidationCallBack方法里面的代码你没看到么?你测试过没有???贴出来你的代码和XML片段