Avatar billede babz Nybegynder
03. januar 2005 - 23:57 Der er 8 kommentarer og
3 løsninger

CreateElement til Childnodes

Hej....
Jeg forsøger at oprette nye knuder i mit XML dokument.
Men jeg vil ikke kun oprette en knude...jeg vil også gerne oprette knuder i mine nye knuder....

Se her:
---------------kode
Set objWeek = objRoot.SelectSingleNode("uge[ugenr='" & strFormUgenr & "']")
Set objDag = objWeek.SelectSingleNode("ugedag[navn='" & strFormUgeDag & "']")

Set objNewNode = objDag.CreateElement("arr")
objNewNode.appendChild(objDag.CreateElement("tid"))
objNewNode.appendChild(objDag.CreateElement("lokale"))
objNewNode.appendChild(objDag.CreateElement("text"))
objNewNode.childNodes(0).text = strNewTid
ObjNewNode.childNodes(1).text = strNewLok
objNewNode.ChildNodes(2).CreateElement("type")
objNewNode.ChildNodes(2).CreateElement("link")
objNewNode.ChildNodes(2).CreateElement("beskr")
objNewNode.ChildNodes(2).ChildNodes(0).text = strNewType
objNewNode.ChildNodes(2).ChildNodes(1).text = strNewLink
objNewNode.ChildNodes(2).ChildNodes(2).text = strNewBeskr
                               
objDag.appendChild(objNewNode.cloneNode(True))
objXML.save(strXML)
---------/kode

Jeg er ny i asp og savner et godt api a'la det de rfindes til php måske...Så derfor er mit forsøg muligvis en smule klodset

Må jeg overhovedet skabe nye childnodes i childnodes jeg selv lige har skabt...og hvordan gøre jeg det????


Stort?

/Babz
Avatar billede babz Nybegynder
04. januar 2005 - 15:50 #1
Jeg har nu fiflet mig frem til at koden skal se nogenlunde således ud:
---------------------
Set objRootNode = objDag.CreateElement("arr")
    objRootNode.AppendChild(objDag.CreateElement("tid")).Text = strNewTid
    objRootNode.AppendChild(objDag.CreateElement("lokale")).Text = strNewLok
    Set objChildNode = objRootNode.AppendChild(objDag.CreateElement("text"))
        objChildNode.AppendChild(objDag.CreateElement("type")).Text = strNewType
        objChildNode.AppendChild(objDag.CreateElement("link")).Text = strNewLink
        objChildNode.AppendChild(objDag.CreateElement("beskr")).Text = strNewBeskr

--------------------------

Men jeg får følgende serverfejl:
-------------
Object doesn't support this property or method: 'objDag.CreateElement'
--------------

Er der nogen der kan se hvorfor....???

/Babz
Avatar billede softspot Forsker
04. januar 2005 - 19:02 #2
CreateElement skal gøres fra selve xml-dokument objektet, du forsøger at gøre det med en xmlnode-objekt og det er ikke tilladt.
Du kan i stedet benytte flg. til at oprette et nyt element:

objNode = objXML.CreateElement("arr");

Så har du en xml-node med tagnavn arr.
Avatar billede babz Nybegynder
04. januar 2005 - 20:15 #3
Åhhh...
Jamen så kan mit forehavende måske ikke lade sig gøre.
Jeg er med på at bruge CreateElement på mit xmlobjekt...men det kan altså ikke lade sig gøre at neste flere childnode i en childnode...
Problemet her er tagget text.
Dette tag skal indeholde tre yderligere tags.
Det kan jeg altså ikke klare i een omgang???

Jeg kan måske gøre det af flere omgange...ved at gemme mit tag "text"...(gemme filen),
åbne den igen og hente den knude jeg har oprettet og tilføje de sidste knuder???
Eller hur?

/Babz
Avatar billede babz Nybegynder
04. januar 2005 - 21:12 #4
Hmmmm nu når jeg læser dit indlæg igen lyder det som om det slet ikke kan lade sig gøre.
Kan jeg kun tilføje knuder til roden...eller må jeg godt som jeg forsøger her, tilføje knuder til en eller flere underknuder længere nede i xml-træet????

/Babz
Avatar billede softspot Forsker
04. januar 2005 - 22:28 #5
Du kan sagtens lave et hierarki af noder, men det er kun xml-documentet der kan skabe dem. Hvor du indsætter noderne i strukturen er ligegyldigt, sålænge det er et eller andet sted i det dokument som har skabt noden...

Så det eksempel du viste i anden omgang kan godt bruges, når blot du udskifter objDag med objXML.

Go for it! :)
Avatar billede babz Nybegynder
05. januar 2005 - 14:49 #6
"Hvor du indsætter noderne i strukturen er ligegyldigt, sålænge det er et eller andet sted i det dokument som har skabt noden..."

Hmmm...OK jeg er med på at jeg kun kan lade xmldocument skabe knuder.
Men jeg har brug for at skabe knuder et bestemt sted i filen...og ikke bare til slut eller i starten af filen....

Jeg vil gerne kunne vælge en bestemt knude ud til at oprette flere knuder i.
Det kan jeg måske ikke med CreateElement...jeg skal måske ud i noget med insertAfter/before eller hvad....

NEJ....nu er det snart nok...det er fandme næsten ligsom at kode med bind for øjnene det her.
Er der ikke nogen der har et tip til hvor jeg kan finde et asp API der kan bruges ligesom til PHP eller java.
Jeg sidder og koder i blinde...og der er ikke megen hjælp at hente i min VIM.

/Babz
Avatar billede softspot Forsker
05. januar 2005 - 19:29 #7
Rooolig nu :)

Det er ikke så svært og du kan sagtens skabe knuder midt i filen. Som jeg sagde skulle du bare bruge det kode du kom frem til i dit andet post og udskifte objDag med objXML - sådan her:

Set objRootNode = objXML.CreateElement("arr")
objRootNode.AppendChild(objXML.CreateElement("tid")).Text = strNewTid
objRootNode.AppendChild(objXML.CreateElement("lokale")).Text = strNewLok

Set objChildNode = objRootNode.AppendChild(objXML.CreateElement("text"))
objChildNode.AppendChild(objXML.CreateElement("type")).Text = strNewType
objChildNode.AppendChild(objXML.CreateElement("link")).Text = strNewLink
objChildNode.AppendChild(objXML.CreateElement("beskr")).Text = strNewBeskr

og så får du en struktur der ser således ud:

<arr>
  <tid>...</tid>
  <lokale>...</lokale>
  <text>
    <type>...</type>
    <link>...</link>
    <beskr>...</beskr>
  </text>
</arr>

Hvis du kan genneskue hvorfor du får denne struktur, er du godt på vej til at bruge dette interface. Prøv det og hold kontakten vedlige her, så skal jeg nok se om jeg ikke kan assistere til du føler dig lidt mere sikker på hvad du skal gøre og hvorfor...
Avatar billede babz Nybegynder
05. januar 2005 - 20:19 #8
Super fedt...og tak endnu en gang.

Så skal jeg bare have skidtet ned i den rigtige knude.
Det må jeg godt gøre med appandchild ??????
Eller fungerer det heller ikke på et selectSingleNode-objekt?

Jeg kunne nu stadig godt bruge et godt API...
/Babz
Avatar billede softspot Forsker
05. januar 2005 - 22:11 #9
Du kan finde en knude ved at kalde SelectSingleNode på et hvilket som helst element i dokumentet således:

Set objTextType = objDag.SelectSingleNode("/arr/text/type")
If Not objTextType Is Nothing Then
  objTextType.AppendChild(objXML.CreateElement("subtype")).Text = strTxtSubType
End If

Bemærk at det altid er en god idé at checke om det objekt du finder via SelectSingleNode.

Det vil give flg. struktur (antagende at du arbejde videre med den fra tidligere):

<arr>
  <tid>...</tid>
  <lokale>...</lokale>
  <text>
    <type>...
      <subtype>...</subtype>
    </type>
    <link>...</link>
    <beskr>...</beskr>
  </text>
</arr>


Du kan også bruge SelectSingleNode til at vælge knuder relativt ifht. et aktuel node (det andet eksempel valgt absolut, hvis du ikke skulle have opdaget det ;)). Men det er jo et helt kapitel for sig selv det der XPath :)
Avatar billede babz Nybegynder
05. januar 2005 - 23:21 #10
Jamen her går det jo fint efterhånden....
Smilet er begyndt at komme frem på mine læber.

Jeg takker ydmygst for den fornemme hjælp...og giver gerne et par karmapoint oven i hatten.

Tak herfra

/Babz
Avatar billede softspot Forsker
05. januar 2005 - 23:31 #11
Vi kan ikke have at folk går og mister modet og det er i særdeleshed en fornøjelse at hjælpe når man får sådan en positiv respons. Jeg takker :)
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
Kurser inden for grundlæggende programmering

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