[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

microsoft.public.dotnet.framework.sdk

Problems validating using DTD

Sohail

10/30/2003 2:30:00 PM

Hey .NET'ers

I'm having a problem validating an XML file against a DTD
using the ValidatingReader.

Note that I do not want to include a reference to the DTD
in the XML file because I will use my local DTD to
validate the XML no matter what.

When I run the following code on the files below, I get
this exception:

if (vt==ValidationType.None)
{
throw new
XMLValidationException
(ValidatorException.IllegalValidationType);
}
IsValid = true;
XmlTextReader x = new XmlTextReader
(new StringReader(XML));
XmlValidatingReader v = new
XmlValidatingReader(x);
v.ValidationType = vt;
#if DEBUG
Console.WriteLine("Validator is
a " + vt + " located at " + ValidatorPath);
#endif
v.Schemas.Add(null,new
XmlTextReader(new StringReader(new StreamReader
(ValidatorPath).ReadToEnd())));
v.ValidationEventHandler += new
ValidationEventHandler(XMLValidator.CallBack);
while (v.Read())
{}
v.Close();
return IsValid;

Unhandled Exception: System.Xml.XmlException: This is an
unexpected token. The expected token is 'DOCTYPE'. Line 1,
position 3

If I include a DOCTYPE tag as <!DOCTYPE QUERY [...]>, then
I get an exception saying that the root element is not
defined. What am I doing wrong?

Here is the XML file:

<QUERY>
<SELECT type="ALL"><!--type="ALL" or "DISTINCT"-->
<Table name="Table1">
<Field name="Field1"/>
<Field name="Field2"/>
<Field name="FieldN"/>
</Table>
<Table/><!-- Selects whole table-->
</SELECT>
<FROM TableName="Table1"/>
<WHERE>
<Condition CDATA="Table1.Field >= 5"/>
</WHERE>
<JOINS>
<!--FromTableField is the field we are joining on
which
is a member of the table referenced in the FROM
element-->
<Join type="inner" FromTableField="Field1"
Table="Table" Field="Field"/>
</JOINS>
<ORDERBY>
<OrderBy TableName="Table1" FieldName="Field1"
Type="ASC"/>
<OrderBy TableName="Table2" FieldName="Field1"
Type="DESC"/>
</ORDERBY>
</QUERY>

Here is the DTD file

<!ELEMENT QUERY ( SELECT, FROM, WHERE?, JOINS?, ORDERBY? )
>

<!ELEMENT Condition EMPTY >
<!ATTLIST Condition text CDATA #REQUIRED >

<!ELEMENT FROM EMPTY >
<!ATTLIST FROM TableName CDATA #REQUIRED >

<!ELEMENT Field EMPTY >
<!ATTLIST Field name CDATA #REQUIRED >

<!ELEMENT JOINS ( Join+ ) >

<!ELEMENT Join EMPTY >
<!ATTLIST Join Field CDATA #REQUIRED >
<!ATTLIST Join FromTableField CDATA #REQUIRED >
<!ATTLIST Join Table CDATA #REQUIRED >
<!ATTLIST Join type CDATA #REQUIRED >

<!ELEMENT ORDERBY ( OrderBy+ ) >

<!ELEMENT OrderBy EMPTY >
<!ATTLIST OrderBy FieldName CDATA #REQUIRED >
<!ATTLIST OrderBy TableName CDATA #REQUIRED >
<!ATTLIST OrderBy Type CDATA #REQUIRED >

<!ELEMENT SELECT ( Table+ ) >
<!ATTLIST SELECT type (ALL|DISTINCT) #REQUIRED >

<!ELEMENT Table ( Field* ) >
<!ATTLIST Table name CDATA #IMPLIED >

<!ELEMENT WHERE ( Condition+ ) >