我已經做了一個XML模式來驗證傳入的XML文件來驗證它們是否是一個錯誤。 我有一些代碼應該在xml文件有效時返回true,否則返回false。 我也做了兩個XML文件,其中一個是有效的,另一個是無效的。但是,我的代碼對於它們都返回true,也認爲它們都是有效的。怎麼來的?我哪裏做錯了?無效的XML出來作爲有效
的模式:
XMLSchemaError.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="XMLSchemaError"
targetNamespace="http://tempuri.org/XMLSchemaError.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchemaError.xsd"
xmlns:mstns="http://tempuri.org/XMLSchemaError.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="Error">
<xs:complexType>
<xs:sequence>
<xs:element name="Server_ID" type="xs:integer" />
<xs:element name="Prioritizing" type="xs:token" />
<xs:element name="Type" type="xs:token" />
<xs:element name="Thrown_by" type="xs:token" />
<xs:element name="Code" type="xs:string" />
<xs:element name="Text" type="xs:string" />
<xs:element name="Time_occured" type="xs:dateTime" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
代碼來驗證XML文件:
XMLValidation.cs
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();
}
的2個XML文件來驗證:
有效.XML
<?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>
Invalid.xml
<?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>
您的模式描述了「http:// tempuri.org/XMLSchemaError.xsd」中的元素。您的XML片段都不會聲稱在任何名稱空間中(即,既不使用任何'xmlns'屬性) –
好吧。我對XML很陌生,所以你能告訴我如何將該名稱空間屬性添加到XML文件以使其工作? – Kailayla