webForumDet fria alternativet

Visa data från XML-fil

3 svar · 311 visningar · startad av m_soderlund

m_soderlundMedlem sedan sep. 20026 425 inlägg
#1

/r Problemet är nu löst. XML-filen finns att titta på här: https://www.dileno.hel.nu/wF/wF.xml

Ordinarie fråga

Jag har lite problem med att visa data designmässigt tilltalande från en xml-fil. Jag kan visa data, se här för hur det ser ut: http://www.dileno.hel.nu/wF2

Nu är det så att jag inte vill att alla "rader" i xml-filen ska skrivas ut precis efter varandra, i stället för att det står

m_soderlund
Martin Söderlund
Dryden
Daniel Rydén

så ska det stå

m_soderlund
Martin Söderlund

Dryden
Daniel Rydén

Jag vill alltså ha en extra radbrytning.
XML-filen jag hämtar data från finns här: http://www.dileno.hel.nu/wF2/wF.xml

Jag antar att problemet har att göra med att Användarnamn och Namn står efter varandra i XML-filen.

Hoppas ni förstår mitt problem, och att det kan lösas. :)

Min codebehindfil ser ut så här (rödmarkerad kod är den jag använder för att presentera datan från XML-filen.):

'importerar namnområden, så kallade namespace's
Imports System
Imports System.Text
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.VisualBasic
Imports System.IO
Imports System.Xml

'huvudklassen som alltid körs på sidan
public Class def_ : Inherits Page

protected withevents lbl_medlemmar as label
protected withevents anvnamn as textbox
protected withevents namn as textbox
protected withevents ny_medlem as button
protected withevents hl_ny as hyperlink
protected withevents ph_ as placeholder

[red]sub page_load()

    ph_.Visible = False

    select case request.querystring("x")
        case "ny"
            ph_.Visible = True
            hl_ny.Visible = False
    end select

    if file.exists(Server.MapPath("") & "/" & "wF.xml") then

    dim xmldoc as new XmlDocument
        xmldoc.Load(Server.MapPath("") & "/" & "wF.xml")

    dim child as XmlNode = xmldoc.SelectSingleNode("/webForum")
    dim x as new XmlNodeReader(child)
        while(x.Read())
            if x.nodetype = xmlnodetype.Text then
                lbl_medlemmar.Text += x.Value & "<br />"
            end if
        end while

    end if

end sub[/red]

dim dsa as new DataSet("webForum")

sub laggtill_medlem(sender as object,e as eventargs)

if not file.exists( Server.MapPath("") & "/" & "wF.xml") then

    dim filename as string
        filename = Server.MapPath("") & "/" & "wF.xml"

    dim myFileStream as new FileStream(filename,FileMode.Create)

    dim myXmlWriter as new XmlTextWriter(myFileStream,Encoding.Unicode)
        myXmlWriter.WriteStartDocument

    dsa.WriteXml(myXmlWriter)

    myXmlWriter.Close()

end if

'ladda en xml-fil
dim xmldoc as XmlDocument = new XmlDocument()
    xmldoc.Load( Server.MapPath("") & "/" & "wF.xml" )

dim parentNode as XmlElement = xmldoc.CreateElement("Användarnamn")
     xmldoc.DocumentElement.appendChild(parentNode)

dim memberText As XmlText = xmldoc.CreateTextNode(anvnamn.Text)
    parentNode.appendChild(memberText)

dim childNode as XmlElement = xmldoc.CreateElement("Namn")
    xmldoc.DocumentElement.appendChild(childNode)

dim memberName as XmlText = xmldoc.CreateTextNode(namn.Text)
     childNode.appendChild(memberName)

xmldoc.Save( Server.MapPath("") & "/" & "wF.xml" )

response.redirect("default.aspx")

end sub

end class

På min huvudsida har jag en label, den ser ut så här:

<asp:Label id="lbl_medlemmar" runat="server"></asp:Label>

Mycket tacksam för hjälp!

SPiNMedlem sedan mars 20007 896 inlägg
#2

Du har lagt upp din XML-fil lite udda, måste jag säga. Gör en "entrypoint" för varje medlem istället, så blir det mer logiskt och säkerligen snyggare att lösa i ett programmeringsspråk när man hämtar data:

<?xml version="1.0" encoding="ISO-8859-1"?>
<webForum>
     <anmäld>
          <användarnamn>blah</användarnamn>
          <namn>Blah Bluh</namn>
     </anmäld>
     <anmäld>
          <användarnamn>bop</användarnamn>
          <namn>Mm Bop</namn>
     </anmäld>
</webForum>
DinoMedlem sedan sep. 20011 914 inlägg
#3
//c#

XmlTextReader xdr = new XmlTextReader(Server.MapPath("wF.xml"));

while(xdr.Read())
{
   xdr.MoveToContent();
   switch(xdr.LocalName)
   {
      case "användarnamn" : lbl_medlemmar.Text += xdr.ReadString() + "<br/>"; break;
      case "namn" : lbl_medlemmar.Text += xdr.ReadString() + "<br/><br/>"; break;
   }
}
xdr.Close();

----------------------------------------------------
//vb.net

Dim xdr as new XmlTextReader(Server.MapPath("wF.xml"))

While xdr.Read()
   xdr.MoveToContent()
   Select xdr.LocalName
      Case "användarnamn"
         lbl_medlemmar.Text &= xdr.ReadString() & "<br/>"
      Case "namn"
         lbl_medlemmar.Text &= xdr.ReadString() & "<br/><br/>"
    End Select
End While
xdr.Close()

red// du använde visst vb

m_soderlundMedlem sedan sep. 20026 425 inlägg
#4

Dino - helt enkelt underbart. Du glömde dock i brådskan några tecken i select case-satsen.

dim xdr as new XmlTextReader(Server.MapPath("") & "/" & "wF.xml")

while xdr.Read()
   xdr.MoveToContent()
   select [b]case[/b] xdr.LocalName
      case "Användarnamn"
         lbl_medlemmar.Text += xdr.ReadString() & "<br/>"
      case "Namn"
         lbl_medlemmar.Text += "&nbsp;&nbsp;" & xdr.ReadString() & "<br/><br/>"
    end select
end while

Underbart - tackar så mycket!

SPiN »
Jag funderade på det och lyckades en gång (men då hade jag ändå inte rätt kod). Sen så lyckades jag inte använda rätt objekt till rätt ändamål. XmlElement fungerade inte så bra. :(
Ska sätta mig in i detta mer när jag har tid.

Hur som helst - otroligt tack! :D

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)