在C#中:
我有一组文本行(应该是XML),它们被发送到要添加到XML文档中的函数。每一行都是一个简单的块,如以下3个示例:
<AAA f="1" g="3"> </AAA>
<AAA f="2" g="2"> </AAA>
<AAA f="3" g="3"> </AA <-- Oops a bad one!
在将其接受为完整的XML文档之前,我需要检查每一行,看看它是否是有效的XML,因为有些行不好,但我们想要所有好的行。
ROW1: good
ROW2: good
ROW3: bad
ROW4: good
在这种情况下,我们只需要ROW1,2和4。
那么,当行字符串不是完整文档时,我该如何检查它是否是有效的XML呢?
我会尝试这样的东西:
public static bool IsValid(this string XML)
{
try
{
XElement temp = XElement.Parse(XML);
}
catch (FormatException)
{
return false;
}
catch (XmlException)
{
return false;
}
return true;
}
您可以使用XmlTextReader验证XML文档片段(这就是您的行),但您必须使用特殊的读取器设置创建读取器
XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
XmlReaderSettings settings = new XmlReaderSettings() {
ConformanceLevel = ConformanceLevel.Fragment
};
XmlReader reader = XmlReader.Create(new StringReader(xmlFrag), settings, context);
XmlReaderSettings ConformanceLevel
我会这样做。
private static bool IsValidXml(string xmlToCheck)
{
var doc = new XmlDocument();
try
{
doc.LoadXml(xmlToCheck);
return true;
}
catch (Exception ex)
{
//catch ex.
return false;
}
}