Avatar billede stubid_cat Nybegynder
17. marts 2004 - 17:06 Der er 11 kommentarer og
1 løsning

Udtræk af et enkelt element fra et XML doc

jeg har følgende XML dokument:

<?xml version="1.0" encoding="iso-8859-1"?>
<dokumenter>
  <hold>
    <id>Hold1</id>
    <emne>
      <titel>Hold1 Emne1</titel>
      <dokument>
        <overskrift>Hold1 Emne1 Dokument1</overskrift>
    <tid>10-10-04</tid>
        <tekst>Hold1 Emne1 Dokument1</tekst>
      </dokument>
    </emne>
    <emne>
      <titel>Hold1 Emne2</titel>
      <dokument>
        <overskrift>Hold1 Emne2 Dokument2</overskrift>
    <tid>21-10-04</tid>
        <tekst>Hold1 Emne2 Dokument2 tekst </tekst>
      </dokument>
    </emne>
  </hold>
  <hold>
    <id>Hold2</id>
    <emne>
      <titel>Hold2 Emne1</titel>
      <dokument>
        <overskrift>Hold2 Emne1 Dokument1</overskrift>
    <tid>30-10-04</tid>
        <tekst>Hold2 Emne1 Dokument1 tekst</tekst>
      </dokument>
    </emne>
  </hold>
</dokumenter>

Jeg har skåret lidt ned på dokumentet da der er fler emner og dokumenter.

Mit problem er at jeg skal hente teksten til et specifikt dokument, hvor hold id, emne titel og dokument overskrift haves
Hvordan gør jeg det? (har fundet eksempler på hvordan det kan hentes ud hvis der bruges atributter men det kan jeg desvære ikke bruge)

Mvh Tina
Avatar billede nute Nybegynder
17. marts 2004 - 18:06 #1
nu ved jeg jo ikek hvad du bruger af objekter for at navigere rundt i dit XML dokument, men jeg ville have bruge XPath til at spørge:

ditXMLObjekt.selectSingleNode( "/dokumenter/hold[ id = 'Hold1' ]/emne[ titel = 'Hold1 Emne1' ]/dokument[ overskrift = 'Hold1 Emne1 Dokument1' ]/tekst" );

/nute
Avatar billede stubid_cat Nybegynder
17. marts 2004 - 18:12 #2
Har fundet på noget men jeg syntes det er lidt knudret så hvis der er nogen der har en bedre ide så vil jeg da gerne høre det =)

Dim hold As String = Request.QueryString("Hold")
Dim emne As String = Request.QueryString("Emne")
Dim dokument As String = Request.QueryString("Dokument")

XMLDataSet = New DataSet()
XMLDataSet.ReadXml(Server.MapPath("Nyheder2.xml"))
Dim dtHold As DataTable = XMLDataSet.Tables("hold")
Dim dtEmne As DataTable = XMLDataSet.Tables("emne")
Dim dtDokument As DataTable = XMLDataSet.Tables("dokument")
Dim holdRow As DataRow
Dim emneRow As DataRow
Dim dokumentRow As DataRow

For Each holdRow In dtHold.Rows
  If holdRow.Item("id") = hold Then
    For Each emneRow In holdRow.GetChildRows("hold_emne")
      If emneRow.Item("titel") = emne Then
        For Each dokumentRow In emneRow.GetChildRows("emne_dokument")
          If dokumentRow.Item("overskrift") = dokument Then
            divNyhed.InnerHtml = dokumentRow("tekst")
          End If
        Next
      End If
    Next
  End If
Next
Avatar billede stubid_cat Nybegynder
17. marts 2004 - 18:14 #3
/nute : Men kan man ikke kun bruge det til XML med atributter?
Avatar billede nute Nybegynder
17. marts 2004 - 18:17 #4
stubit_cat >> nope ... prøv og du vil se det fungerer ;o]

med xpath kan du forespørge i et xml dokument uanset om det er en atribut eller node.

/nute
Avatar billede stubid_cat Nybegynder
17. marts 2004 - 18:33 #5
ok det virker fint men jeg skal have lagt variabler ind og nu virker det ikke

        Dim hold As String = Request.QueryString("Hold")
        Dim emne As String = Request.QueryString("Emne")
        Dim dokument As String = Request.QueryString("Dokument")
        Dim objXMLDoc As New XmlDocument()
        Dim objDokument As XmlNode
        objXMLDoc.Load(Server.MapPath("Nyheder2.xml"))
        objDokument = objXMLDoc.SelectSingleNode("/dokumenter/hold[ id =" + hold + " ]/emne[ titel =" + emne + " ]/dokument[ overskrift = " + dokument + " ]/tekst")
        divNyhed.InnerHtml = objDokument.InnerXml()

får følgende fejl:

Exception Details: System.Xml.XPath.XPathException: '/dokumenter/hold[ id =Hold1 ]/emne[ titel =Hold1 Emne2 ]/dokument[ overskrift = Hold1 Emne2 Dokument1 ]/tekst' has an invalid token.
Avatar billede stubid_cat Nybegynder
17. marts 2004 - 18:34 #6
kan du se hvad der er galt!!!? =(
Avatar billede nute Nybegynder
17. marts 2004 - 18:35 #7
du skal have '' omkring dine variable:

objDokument = objXMLDoc.SelectSingleNode("/dokumenter/hold[ id = '" + hold + "' ]/emne[ titel = '" + emne + "' ]/dokument[ overskrift = '" + dokument + "' ]/tekst")
Avatar billede stubid_cat Nybegynder
17. marts 2004 - 18:36 #8
hov havde glemt  ' ' <-- pinger
Avatar billede stubid_cat Nybegynder
17. marts 2004 - 18:37 #9
tak skal du have smid et svar så for du pointsne
Avatar billede nute Nybegynder
17. marts 2004 - 18:40 #10
svar da ;o]

du må gerne smide et svar selv og beholde halvdelen...
Avatar billede stubid_cat Nybegynder
17. marts 2004 - 18:42 #11
næ har masser af points ellers tak
Avatar billede nute Nybegynder
17. marts 2004 - 18:43 #12
jamen selv tak :o]
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester