W
Willie B. Hardigan
I have an XML file like so..
<?xml version="1.0" encoding="utf-8" ?>
<zap>
<data><string>abc</string><hex>a110ff</hex><rnd min="0"
max="10"></rnd><string>xyz</string></data>
</zap>
and i have a function that reads it as follows...
//-------------------------------------------------------------------------
private static void runFile (
string dataFile,
string ip,
int port
)
//-------------------------------------------------------------------------
// XML Format for patterns
//
// <?xml version="1.0" encoding="utf-8" ?>
// <zap>
// <data><string>abc</string><hex>a110ff</hex><rnd min="0"
max="10"></rnd><string>xyz</string></data>
// </zap>
//-------------------------------------------------------------------------
{
FileStream fs = new FileStream(dataFile, FileMode.Open);
StreamReader sr = new StreamReader(fs);
XmlTextReader xtr = new XmlTextReader(sr);
MemoryStream ms = new MemoryStream();
try
{
while (xtr.Read())
{
switch (xtr.Name)
{
case "data":
{
while (xtr.Read())
{
switch (xtr.Name)
{
case "string":
{
string s = xtr.ReadString();
ms.Capacity += s.Length;
ms.Write(convertStringToByteArray(s), 0, s.Length);
break;
}
case "hex":
{
string s = xtr.ReadString();
int len = s.Length/2;
byte[] ba = new byte[len];
for (int i = 0, j = 0 ; i <= len-1 ; i++, j+=2)
{
string sc = s[j].ToString();
sc += s[j+1].ToString();
int h = Convert.ToInt32(sc, 16);
ba = Convert.ToByte(h);
}
ms.Capacity += len;
ms.Write(ba, 0, len);
break;
}
case "rnd":
{
int min = Int32.Parse(xtr.GetAttribute("min"));
int max = Int32.Parse(xtr.GetAttribute("max"));
ms.Capacity += max;
byte[] rndBa = new Byte[max];
rndBa = RndClass.RndBytes(min, max);
ms.Write(rndBa, 0, max);
break;
}
default:
{
break;
}
}
}
sendData(ip, port, ms.GetBuffer(), false, true);
break;
}
default:
{
break;
}
}
}
}
catch(Exception err)
{
Console.WriteLine(err.Message);
}
}
//-------------------------------------------------------------------------
I end up in the case "rnd": for the </rnd> end node for some reason yet when
i change the XML file to this...
<rnd min="0" max="10"/>
with no </rnd> it works fine.
What gives?
<?xml version="1.0" encoding="utf-8" ?>
<zap>
<data><string>abc</string><hex>a110ff</hex><rnd min="0"
max="10"></rnd><string>xyz</string></data>
</zap>
and i have a function that reads it as follows...
//-------------------------------------------------------------------------
private static void runFile (
string dataFile,
string ip,
int port
)
//-------------------------------------------------------------------------
// XML Format for patterns
//
// <?xml version="1.0" encoding="utf-8" ?>
// <zap>
// <data><string>abc</string><hex>a110ff</hex><rnd min="0"
max="10"></rnd><string>xyz</string></data>
// </zap>
//-------------------------------------------------------------------------
{
FileStream fs = new FileStream(dataFile, FileMode.Open);
StreamReader sr = new StreamReader(fs);
XmlTextReader xtr = new XmlTextReader(sr);
MemoryStream ms = new MemoryStream();
try
{
while (xtr.Read())
{
switch (xtr.Name)
{
case "data":
{
while (xtr.Read())
{
switch (xtr.Name)
{
case "string":
{
string s = xtr.ReadString();
ms.Capacity += s.Length;
ms.Write(convertStringToByteArray(s), 0, s.Length);
break;
}
case "hex":
{
string s = xtr.ReadString();
int len = s.Length/2;
byte[] ba = new byte[len];
for (int i = 0, j = 0 ; i <= len-1 ; i++, j+=2)
{
string sc = s[j].ToString();
sc += s[j+1].ToString();
int h = Convert.ToInt32(sc, 16);
ba = Convert.ToByte(h);
}
ms.Capacity += len;
ms.Write(ba, 0, len);
break;
}
case "rnd":
{
int min = Int32.Parse(xtr.GetAttribute("min"));
int max = Int32.Parse(xtr.GetAttribute("max"));
ms.Capacity += max;
byte[] rndBa = new Byte[max];
rndBa = RndClass.RndBytes(min, max);
ms.Write(rndBa, 0, max);
break;
}
default:
{
break;
}
}
}
sendData(ip, port, ms.GetBuffer(), false, true);
break;
}
default:
{
break;
}
}
}
}
catch(Exception err)
{
Console.WriteLine(err.Message);
}
}
//-------------------------------------------------------------------------
I end up in the case "rnd": for the </rnd> end node for some reason yet when
i change the XML file to this...
<rnd min="0" max="10"/>
with no </rnd> it works fine.
What gives?