返回信息流问题算是解决了吧,我更新一下解决方法好了:
一共要检查的格式其实包括两种:
1.符合xml的基本语法
2.符合我想要的xml模板内容
对于1,我用了vs里面的xmldocument直接解决了。信息陈述非常详细,可以信赖。
public static string simpleXMLFormatCheck(string Filename)
{
XmlDocument xmlDoc = new XmlDocument();
try
{
xmlDoc.Load(Filename);
}
catch (XmlException e)
{
//Console.WriteLine(e.Message);
return e.Message;
}
return null;
}
对于2,本来打算让代码根据当前的内容,动态生成一个xsd文件,然后对文本内容进行校对。做了个小例子尝试了一下,提示似乎也够用了。但是没有找到比较好用的动态生成xsd的方法,自己用string拼接成的话,可能要花费挺大力气的,所以最后还是用了regex(@"<.*?>")的方式来逐步校对我自己的模板。
因为在第一遍的纯xml格式检查中已经排除了标签不匹配等基本格式的问题,所以在第二步的模板检查中其实可以少做很多匹配校验工作的。目前就这么解决了,期待更好的方法ing~
======================================================================
一个richTextBox里面的内容,要进行xml文件格式的检查。简单说来:
<a>
<b>123</b>
</a>
这样的xml格式是对的,但如
<a>
<b>123</b>456
</a>
或者
<ab>
<b>123</b>
</a>
这样的xml格式肯定就不对。
觉得自己从头到尾检查的话有一点麻烦,有没有什么可以直接使用的检查方法呢?
主要是能检查出错在了什么地方,能提示出来
谢谢
这是一条镜像帖。来源:北邮人论坛 / dot-net / #2589同步于 2010/12/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
[已解决]C# xml文件格式检查
DH
2010/12/23镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
简单想到的解决方案是:
1.建立一个栈
2.把xml的标签<tag> </tag>逐个入栈,由于<tag>先入栈,后面必须得有</tag>;同理,如果一个</tag>入栈时,遍历栈的内容,前面没有<tag>则</tag>非法;</tag>入栈时,判断栈中有<tag>紧挨着时,<tag></tag>合法,<tag></tag>合并,<tag></tag>消失,出栈。
3.在进行2.的过程,如果遇到 <tag>之后或</tag>之前有内容,做一个判断,设内容为contennt,检查到content,则content之前必须有<tag>,content之后必须有</tag>,否则该处内容非法。
使用正则表达式,和stack容器可以完成上述的过程。
这个思路大概类似
主要是我不想自己从头到尾去验证,想看看有没有什么现成的方法可以使用
【 在 ahomer 的大作中提到: 】
: 简单想到的解决方案是:
: 1.建立一个栈
: 2.把xml的标签<tag> </tag>逐个入栈,由于<tag>先入栈,后面必须得有</tag>;同理,如果一个</tag>入栈时,遍历栈的内容,前面没有<tag>则</tag>非法;</tag>入栈时,判断栈中有<tag>紧挨着时,<tag></tag>合法,<tag></tag>合并,<tag></tag>消失,出栈。
: ...................
构造以xmlreader 加载,看看有没出异常?
不知道异常信息由细致到哪行错了,可以研究研究
【 在 DH 的大作中提到: 】
: 这个思路大概类似
: 主要是我不想自己从头到尾去验证,想看看有没有什么现成的方法可以使用
: 【 在 ahomer 的大作中提到: 】
: ...................