[ Simke @ 09.08.2004. 07:36 ] @
Nisam do sada koristio XML fajlove u .Net, ali mi je zatrebalo, pa sam malo uzeo da se igram. Dakle problem je sledeci:
Napravim XML fajl sledecim kodom:

Code:

myXmlTextWriter = New XmlTextWriter(Application.StartupPath & "\test.xml", Nothing)
myXmlTextWriter.Formatting = System.Xml.Formatting.Indented
myXmlTextWriter.WriteStartDocument(True)
myXmlTextWriter.WriteStartElement("Settings")
myXmlTextWriter.WriteStartElement("Database", Nothing)
myXmlTextWriter.WriteElementString("Path", "c:\Test.mdb")
myXmlTextWriter.WriteEndElement()
myXmlTextWriter.WriteEndElement()
myXmlTextWriter.Flush()
myXmlTextWriter.Close()


Fajl izgleda ovako:

Code:

<?xml version="1.0" standalone="yes"?>
<Settings>
  <Database>
    <Path>c:\Test.mdb</Path>
  </Database>
</Settings>


Sad krenem da procitam XML fajl sledecim kodom:

Code:

reader = New XmlTextReader(Application.StartupPath & "\test.xml")
        Do While reader.Read()
            Select Case reader.NodeType
                Case XmlNodeType.Element
                    If reader.Name = "Path" Then
                        Me.txtDBPath.Text = reader.Value
                    End If
            End Select
        Loop


E problem je sto reader.Value vraca prazan string ("").
Kako da procitam vrednost elementa?
[ havramm @ 09.08.2004. 13:09 ] @
Vrednost reader.Value ne moze da ti vrati vrednost koju ti ocekujes zato sto za tip XmlNodeType.Element uvek vraca String.Empty (treba malo citati i MSDN...). Parsiraj tako da tekuci cvor proveravas sa XmlNodeType.Text, posto se vrednost koju ti ocekujes nalazi u ChildNode-u elementa "Path" koji je tipa XmlNodeType.Text, ili procitaj sa reader.ReadString().
[ bunker @ 12.08.2004. 15:03 ] @

ja preporucujem to ovako:

Code:
<?xml version="1.0" standalone="yes"?>
<Settings>
  <Database>
    <Path value="c:\Test.mdb"/>
  </Database>
</Settings>


da bi radio prthodni nacin potrebna ti je dtd ili xsd specifikacija, bez obzira da li je standalone ili ne. kada pozoves metog GetTAttribute(attName) klase XmlElement dobicces vrednost atributa attName.
drugi nacin je da citas element path sa svojstvom InnerXml klase XmlElement, ili tako nesto.
mislim da InnerXml bas i nije po specifikaciji dom-a, ali ms voli to...
[ havramm @ 12.08.2004. 17:48 ] @
Citat:
bunker:
da bi radio prethodni nacin potrebna ti je dtd ili xsd specifikacija, bez obzira da li je standalone ili ne...

Sa ovim bas i ne mogu da se slozim, posto covek parsira xml i tu mu uopste nisu (preko) potrebni ni DTD ni XML Schema, slazem se da je pozeljno imati pred sobom neki oblik seme da bi znao kako i sta da parsiras, ali opet, nije neophodno. OK ako prethodno hoces da izvrsis validaciju dokumenta.
Citat:
bunker:
...kada pozoves metog GetTAttribute(attName) klase XmlElement dobicces vrednost atributa attName.

XmlElement se koristi za DOM parsiranje, dok je ovde covek koristio SAX, koliko se ja razumem u "domacu kuhinju"
Citat:
bunker:
drugi nacin je da citas element path sa svojstvom InnerXml klase XmlElement, ili tako nesto. mislim da InnerXml bas i nije po specifikaciji dom-a, ali ms voli to...

Ovo je tacno, a i Microsoft sam kaze:
Citat:
by MSDN:

XmlElement.InnerXml Property
...
"This property is a Microsoft extension to the Document Object Model (DOM)."
...
[ nikola.s @ 12.08.2004. 20:06 ] @
U sledecem rdr.Read() dobijas vrednost.

case XmlNodeType.Element:
if ( rdr.Name == "Path")
{
rdr.Read();
if (rdr.NodeType == XmlNodeType.Text)
{
string test = rdr.Value;
}
}
break;
[ Simke @ 12.08.2004. 20:16 ] @
Hvala na odgovorima, snasao sam se:)