J
Jason (Kusanagihk)
To all,
I've tried to write a program to parse / read the contents of an XML
file. Now if the xml file has no DTD references; it seems to be ok (can
parse and get values from the tags); but when the xml file has a DTD
reference an exception pop out saying invalid Text declaration.... (the
error message is not very clear what I've done wrong in the XML files
and for sure I can run the xml files correctly under IE 5!
The xml file(s):
data file:
<?xml version="1.0"?>
<!DOCTYPE Template SYSTEM "TestingTemplate.dtd">
<Template>
<Item>
<Name>a Name</Name>
<Value>a Value</Value>
</Item>
<Item>
<Name>What ??? &CONST_TITLE;</Name>
</Item>
</Template>
the DTD file:
<?xml version="1.0"?>
<!ELEMENT Template (Item+)>
<!ELEMENT Item (Name+, Value?)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Value (#PCDATA)>
<!ENTITY CONST_TITLE "*** Constants ***">
Parsing method (C#):
System.Xml.XmlTextReader oReader = null;
System.Collections.Stack oStack = new Stack (50);
System.Text.StringBuilder oSB =
new System.Text.StringBuilder (255);
try
{
oReader = new XmlTextReader (this.mTxt_XmlFile.Text);
while (oReader.Read ())
{
System.Xml.XmlNodeType oType = oReader.NodeType ;
switch (oType)
{
case XmlNodeType.Element:
oSB.Append (oReader.Name + ": " + oReader.Value +
"\r\n");
break;
case XmlNodeType.Text:
oSB.Append ("Text within Tags..." + oReader.Value
+ "\r\n");
break;
case XmlNodeType.EntityReference:
MessageBox.Show (oReader.ProhibitDtd + "");
oSB.Append (oReader.Value + "\r\n");
break;
case XmlNodeType.EndElement:
oSB.Append ("End -- " + oReader.Name + ": " +
oReader.Value + "\r\n");
break;
}
}
this.mTxt_MsgArea00.Text += oSB.ToString ();
}
catch (Exception ex)
{
MessageBox.Show (ex.ToString ());
}
finally
{
if (oReader != null)
{
oReader.Close ();
}
oSB = null;
}
Also the XmlResolver or DTD members of the XmlTextReade is always
null.... I bet the reader can't resovlve the DTD file....
Any ideas what was wrong ???
I've tried to write a program to parse / read the contents of an XML
file. Now if the xml file has no DTD references; it seems to be ok (can
parse and get values from the tags); but when the xml file has a DTD
reference an exception pop out saying invalid Text declaration.... (the
error message is not very clear what I've done wrong in the XML files
and for sure I can run the xml files correctly under IE 5!
The xml file(s):
data file:
<?xml version="1.0"?>
<!DOCTYPE Template SYSTEM "TestingTemplate.dtd">
<Template>
<Item>
<Name>a Name</Name>
<Value>a Value</Value>
</Item>
<Item>
<Name>What ??? &CONST_TITLE;</Name>
</Item>
</Template>
the DTD file:
<?xml version="1.0"?>
<!ELEMENT Template (Item+)>
<!ELEMENT Item (Name+, Value?)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Value (#PCDATA)>
<!ENTITY CONST_TITLE "*** Constants ***">
Parsing method (C#):
System.Xml.XmlTextReader oReader = null;
System.Collections.Stack oStack = new Stack (50);
System.Text.StringBuilder oSB =
new System.Text.StringBuilder (255);
try
{
oReader = new XmlTextReader (this.mTxt_XmlFile.Text);
while (oReader.Read ())
{
System.Xml.XmlNodeType oType = oReader.NodeType ;
switch (oType)
{
case XmlNodeType.Element:
oSB.Append (oReader.Name + ": " + oReader.Value +
"\r\n");
break;
case XmlNodeType.Text:
oSB.Append ("Text within Tags..." + oReader.Value
+ "\r\n");
break;
case XmlNodeType.EntityReference:
MessageBox.Show (oReader.ProhibitDtd + "");
oSB.Append (oReader.Value + "\r\n");
break;
case XmlNodeType.EndElement:
oSB.Append ("End -- " + oReader.Name + ": " +
oReader.Value + "\r\n");
break;
}
}
this.mTxt_MsgArea00.Text += oSB.ToString ();
}
catch (Exception ex)
{
MessageBox.Show (ex.ToString ());
}
finally
{
if (oReader != null)
{
oReader.Close ();
}
oSB = null;
}
Also the XmlResolver or DTD members of the XmlTextReade is always
null.... I bet the reader can't resovlve the DTD file....
Any ideas what was wrong ???