C# 无效XML显示为有效XML
我制作了一个XML模式来验证传入的XML文件,以验证它们是否是错误。 我有一些代码,当xml文件有效时应该返回true,否则应该返回false。 我还创建了两个XML文件,其中一个有效,另一个无效。然而,我的代码对它们都返回true,aka认为它们都有效。怎么会?我哪里出错了 模式: XMLSchemaError.xsd 要验证的2个XML文件: Valid.xml 无效的.xml文件 正如评论员所指出的,由于您的XML并没有声明包含任何经过相关模式验证的元素,所以这两个文档都很容易通过验证。它们没有什么可验证的 有多种方法可以纠正这种情况。最简单的方法是只向根元素添加一个默认的XML名称空间。例如:C# 无效XML显示为有效XML,c#,xml,validation,C#,Xml,Validation,我制作了一个XML模式来验证传入的XML文件,以验证它们是否是错误。 我有一些代码,当xml文件有效时应该返回true,否则应该返回false。 我还创建了两个XML文件,其中一个有效,另一个无效。然而,我的代码对它们都返回true,aka认为它们都有效。怎么会?我哪里出错了 模式: XMLSchemaError.xsd 要验证的2个XML文件: Valid.xml 无效的.xml文件 正如评论员所指出的,由于您的XML并没有声明包含任何经过相关模式验证的元素,所以这两个文档都很容易通过验证。它
<?xml version="1.0" encoding="UTF-8"?>
<note xmlns="http://tempuri.org/XMLSchemaError.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
我选择在XML中拼错元素名称,而不是修复模式,只是因为它简化了这个答案中所需的示例XML:。您的模式描述了XML中的元素http://tempuri.org/XMLSchemaError.xsd. 您的两段XML都没有声明在任何名称空间中,也就是说,都没有使用任何xmlns attributesOkay。我对XML非常陌生,您能告诉我如何将名称空间属性添加到XML文件以使其工作吗?谢谢,这不仅解决了问题,而且我现在明白了我做错了什么:
private bool isValid = false;
public bool checkValid(string fileName)
{
try
{
var reader = XmlReader.Create("../../XMLFiles/" + fileName);
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.Load(reader);
doc.Schemas.Add(null, "../../Model/XMLSchemaError.xsd");
doc.Validate(ValidationCallBack);
isValid = true;
}
catch
{
isValid = false;
}
System.Diagnostics.Debug.WriteLine("Check: " + isValid);
return isValid;
}
private void ValidationCallBack(object sender, ValidationEventArgs e)
{
throw new Exception();
}
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Server_ID>4</Server_ID>
<Prioritizing>major</Prioritizing>
<Type>test error</Type>
<Thrown_by>test program</Thrown_by>
<Code></Code>
<Text></Text>
<Time_occurred>2016-02-9T12:34:56.7890</Time_occurred>
</Error>
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<?xml version="1.0" encoding="UTF-8"?>
<note xmlns="http://tempuri.org/XMLSchemaError.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<?xml version="1.0" encoding="UTF-8"?>
<Error xmlns="http://tempuri.org/XMLSchemaError.xsd">
<Server_ID>4</Server_ID>
<Prioritizing>major</Prioritizing>
<Type>test error</Type>
<Thrown_by>test program</Thrown_by>
<Code></Code>
<Text></Text>
<Time_occured>2016-02-09T12:34:56.7890</Time_occured>
</Error>