Hej Hittade felet! TextReeader Bygger på stream object ... de flesta implementationerna av stream objekt kräver att man "commitar" ändringarna innan man kan komma åt dem .. tex med flush eller close elller så .. Vill bara rekommendera ett annat sätt att jobba med XML-filer. Det här exemplet läser in en .vbproj-fil och listar alla filer (ej code-behinds) som ingår :XmlTextReader & XmlTextWriter
Jag försöker först skriva lite xml med XmlTextWriter och sedan läsa den med XmlTextReader. En väg att gå är att skriva till en fil, stänga writern och sedan öppna filen med readern (vilket går fint). En annan variant är att skriva till en Stream (har bla testat MemoryStream), men detta får jag inte att fungera. Strömmen verkar vara tom när jag försköker läsa den (om man tittar i autos-fönstret, ser den oxå ut att försvinna ur scope efter initieringen av XmltextWriter).
Har någon erfarenhet av detta?
En annan fråga är oxå hur man snabbt kan få hela innehållet i XmlTextReader eller XmlDocument till en sträng.
Kod:
Stream stream = new MemoryStream();
XmlTextWriter xtw = new XmlTextWriter(stream, Encoding.UTF8);
xtw.Formatting = Formatting.Indented;
xtw.Indentation = 4;
xtw.WriteStartDocument();
xtw.WriteStartElement("root");
xtw.WriteStartElement("Command");
xtw.WriteString("Connect");
xtw.WriteEndElement();
xtw.WriteEndElement();
xtw.WriteEndDocument();
stream.Position = 0;
XmlTextReader xtr = new XmlTextReader(stream);
try
{
if (!xtr.EOF)
while(xtr.Read())
DebugWL(xtr.Name);
xtr.Close();
xtw.Close();
}
catch(Exception E)
{
DebugWL(E.Message);
}
/peterbladhSv: XmlTextReader & XmlTextWriter
xtw.Flush();
stream.Position = 0;
måste komma innan XmlTextReader initieringen!Sv: XmlTextReader & XmlTextWriter
Sv: XmlTextReader & XmlTextWriter
<code>
string vbProjName=@"c:\projekt\test\test.vbproj"; // Replace with a legal path
try
{
XmlDocument vbProj = new XmlDocument();
try
{
StreamReader sr= new StreamReader(vbProjName,System.Text.Encoding.Default);
vbProj.Load(sr);
sr.Close();
XmlNode node=vbProj["VisualStudioProject"]["VisualBasic"]["Files"]["Include"];
string sPath;
foreach(XmlElement xe in node.ChildNodes)
{
sPath=Path.GetDirectoryName(vbProjName) + @"\" + xe.Attributes["RelPath"].Value;
Console.WriteLine(sPath);
}
}
catch (Exception ex)
{
// Error, propably an ASP.Net project;
}
</code>
/Per Hultqvist