Så får du en node ud der indeholder oplysningerne om den givne nyhed og så er det bare at overføre den relevante data til datagriddet. Jeg går ud fra det er ovenstående der volder dig problemer og ikke datagriddet :)
Hvis du har brug for yderligere oplysninger så prøv at slå XmlDocument og XmlNode op i din MSDN documentation.
tjoh tjah nu har jeg ikke lige den store erfaring med VB.NET syntax, men jeg vil tro det må se ud noget ala sådan her:
Dim ODoc As New XmlDocument("news.xml") Dim ONewsNode As XmlNode ONewsNode = ODoc.SelectSingleNode("//newsdoc/news[@ID = '" & Request.Params("NewsID") & "']")
Igen, prøv at slå de 2 keywords "XmlDocument" og "XmlNode" op i din .NET dokumentation, der er også eksempler med VB kode :)
Jeg har rimelig travtl nu.. har nogen en løsning der gør det muligt at hente en enkelt nyhed fra en XML som kan smides i en datagrid/datalist/label - whatever?..
Du kan formentlig anvende en DataRow som vist i det eksempel og så iterere din NodeList og oprette et DataRow objekt for hver af dem og tilføje dem til en collection som du så kan databinde på din DataGrid. Bemærk at du hiver teksten i en XML node ud ved hjælp af XmlNode.InnerText
Jeg vil ikke skrive al koden for dig (medmindre du kan klare dig med C#), men ovenstående burde kunne hjælpe dig på vej.
En ting der undrer mig er dog at du vil anvende et DataGrid til visning af en bestemt nyhed .. normaltvis anvender man kun den control i forbindelse med f.eks. en liste over nyheder.
Jeg garanterer ikke for at der ikke er nogle syntaxmæssige fejl i ovenstående kode, jeg har ikke testet det af og VB syntaxen sidder ikke lige i fingerspidserne, bare lige så du er opmærksom på det :)
Line 44: <tr> Line 45: <td colspan="3" class="TabelIndhold"> Line 46: <%= Load_Nyhed() %> Line 47: <asp:datagrid id="dgVisNyhed" AllowSorting="false" runat="server"></asp:datagrid> Line 48: </td> ________________________________________________________
System.NullReferenceException: Object reference not set to an instance of an object. at ASP.visnyhed_ascx.Load_Nyhed() in D:\Projects\Heimasíður\Á veg\Tomo.dk\Tomo.dk v1.0\sider\visnyhed.ascx:line 27
Så skyldes det formentlig at din XPATH expression ikke returnerer noget objekt, den er btw. også forkert kan jeg se da du skal skrive [@NyhedsID=... og ikke bare [NyhedsID=... for at få fat på attributten.
Desuden kan du btw. godt fjerne de her 2 erklæringer fra din metode:
Dim Nyhed as XmlNode Dim nodeList as XmlNodeList
Dem havde jeg lige overset, de bruges ikke til noget i den metode.
Dim xmlfilnavn as string = server.MapPath("xml/nyheder.xml") Dim objXMLdoc As New XmlDocument() Dim result as string
try
objXMLdoc.Load(xmlfilnavn)
Dim root as XmlNode = objXMLdoc.DocumentElement Dim strNyhedid as string = request.QueryString("Nyhedid") Dim Nyhed as XmlNode = root.SelectSingleNode("descendant::Nyhed[@NyhedID='" & strNyhedid & "']") result = Nyhed.InnerText
Den nemme måde at få det til at virke på er ved at formatere din XML til følgende:
<?xml version="1.0" encoding="iso-8859-1" ?> <nyheder> <nyhed NyhedsID="1"> <overskrift>Siden oppe!</overskrift> <tekst>Ja så er siden oppe igen...</tekst> <dato>19-02-04</dato> <nNyhed> <Nyhed NyhedsID="2"> <overskrift>Siden oppe IGENIGENIGENIGENIGEN!</overskrift> <tekst>Ja så er siden oppe igen.asdasdasd..</tekst> <dato>20-02-04</dato> </nyhed> </nyheder>
Bemærk også at XML er Casesenstivit, det er altså ikke ligegyldigt om du bruger store eller små bogstaver i din XPATH expression.
Følgende burde være korrekt:
Dim objXMLdoc As New XmlDocument() Dim strNyhedid as string = request.QueryString("Nyhedid") Dim Nyhed as XmlNode = objXMLdoc.SelectSingleNode("//nyheder/nyhed[@NyhedsID='" & strNyhedid & "']") result = Nyhed.InnerText
Jeg takker mange gange.. nu virker det som det skal.. :-)
du får points..
lige et lille spørgsmål til: hvis jeg nu skal skrive til en XML fil hvordan får jeg den til at skrive det på den måde, med nyhedid som et parameter og hvordan kan jeg sikre at den altid giver et unikt id?
For at generere en XML fil anvendes nogle af de samme klasser som du allerede har stiftet bekendtskab med. Nemlig XmlDocument og XmlNode og til håndtering af attributter (f.eks. NyhedsID) benyttes XmlAttribute. Prøv at slå dem op i .NET dokumentationen, der skulle være rigeligt med eksempler der kan hjælpe dig på vej.
Der er flere måder at lave et unikt ID på, f.eks. kan du gennemløbe alle nyheder og så finde ud af hvad det højeste ID er og tælle det 1 op. Du kan også benytte et GUID som er en del af frameworket. Det er en 128bit identifier der er helt og aldeles unik, den benyttes ved at kalde Guid.NewGuid(); Det ser dog ikke helt så pænt ud med en 128bit parameter i en url, så førstnævnte løsning er nok at foretrække i det her tilfælde :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.