Avatar billede jakwag Nybegynder
01. februar 2006 - 12:47 Der er 21 kommentarer og
1 løsning

gemme xml i fil

Hej

Jeg har lavet et javascript. Det skal hente et xml tilføje et element og gemme det igen. Det er stadig på forsøgs stadiet.

XML:

<start>
<tag name="jakob"/>
<tag name="lise"/>
</start>


Jscript:

function saveXml(e)
{
    var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
    var root;
    var newElem;
    xmlDoc.async = false;
    xmlDoc.load("test.xml");
    root = xmlDoc.documentElement;
    newElem = xmlDoc.createElement("tag");
    root.appendChild(newElem);
    root.lastChild.setAttribute('name',"YES");
    xmlDoc.save("test.xml");
    alert(xmlDoc.xml);
}
saveXml();

Det hele virker faktisk, bortset fra linien hvor jeg "forsøger" at gemme xml'en tilbage i filen hvor den kom fra.

Hvad er der galt???

: ) Jakob
Avatar billede olebole Juniormester
01. februar 2006 - 12:56 #1
<ole>

Der er ikke noget galt, men man har fornuftigt nok ikke adgang til at gemme filer på HD'en via JavaScript i en browser  :)

/mvh
</bole>
Avatar billede jakwag Nybegynder
01. februar 2006 - 13:03 #2
Hej

Jeg tester det på en server, i en mappe hvor jeg har skrive rettigheder.

Når jeg tester det uden denne linie:

xmlDoc.save("test.xml");

så kommer den op med alert beskeden som den skal.
Når jeg så sætter linien ind sker der intet. Den bliver ikke gemt og der kommer ingen alert. Er det ikke normalt noget der sker ved kodefejl?
Avatar billede jakwag Nybegynder
01. februar 2006 - 13:06 #3
det undre mig også at i dreamweaver bliver metoden load lilla, men save forbliver sort som om at den ikke er rigtig.
Avatar billede olebole Juniormester
01. februar 2006 - 13:25 #4
Metoden fejler ikke spor - hvadenten DW kender den eller ej - men du må nok lige forklare, hvad du foretager dig. Skriver du JScript under ASP, oder ...?
Avatar billede jakwag Nybegynder
01. februar 2006 - 13:42 #5
Ja, så får du hele historien:

Jeg arbejder normalt i flash og har ikke en dyt forstand på hverken jscript eller asp. Jeg skal lave et script der kan kaldes fra flash og som laver en ekstra childnode i et xml dokument der også ligger på serveren.

Til at starte med troede jeg at det skulle være asp, men så viste det sig at kunne laves med javascript og den syntax passer mig godt da det er den samme som i flash.

Måske tager jeg helt fejl og det kan ikke laves i javascript, men det virkede så langt, så jeg gik ud fra at den også ville kunne gemme den.

Hele min side ser sådan ud:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<script language="JavaScript" type="text/JavaScript">

function saveXml(e)
{
    var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
    var root;
    var newElem;
    xmlDoc.async = false;
    xmlDoc.load("test.xml");
    root = xmlDoc.documentElement;
    newElem = xmlDoc.createElement("tag");
    root.appendChild(newElem);
    root.lastChild.setAttribute('name',"YES");
    xmlDoc.save("test.xml");
    alert(xmlDoc.xml);
}
saveXml();

</script>
</body>
</html>

Håber det hjælper, som sagt fumler jeg lidt i blinde i dette projekt.
Avatar billede jakwag Nybegynder
01. februar 2006 - 13:43 #6
når scriptet har kørt skulle xml'en gerne se sådanne ud:

<start>
<tag name="jakob"/>
<tag name="lise"/>
<tag name="YES"/>
</start>
Avatar billede olebole Juniormester
01. februar 2006 - 13:50 #7
Nej, du kan ikke lave det som et HTML-dokument. Det skal gøres i ASP ... enten i VBScript, JScript eller - hvis du har muligheden - Perl
Avatar billede jakwag Nybegynder
01. februar 2006 - 13:56 #8
øhm ok... troede jscript var en forkortelse af javascript :D

Har fulgt en guide her:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/4ead2a13-de31-487e-b826-53f132f25cbb.asp

Men så her jeg forsøgt at lave det med jscript ser det ude til. Bortset fra at linierne:

script language="JavaScript" type="text/JavaScript">

jo så nok er forkerte, eller hvad? Er der andet galt hvis du kigger på hele scriptet med den viden at det skulle have været jscript?
Avatar billede olebole Juniormester
01. februar 2006 - 14:02 #9
JScript er MS' version af ECMA-standarden, som også ligger til grund for JavaScript.

Der er ikke noget i vejen for at bruge 'Msxml2.DOMDocument.3.0' i et HTML-dokument, hvis koden afvikles i IE. Det har du blot ikke brug for i denne situation.

Det, du skal gøre, er at kalde et ASP-dokument på serveren, der indsætter elementet og igen gemmer xml-dokumentet på serveren
Avatar billede jakwag Nybegynder
01. februar 2006 - 14:05 #10
og i aspdokumentet kan jeg så bruge jscriptet eller hvad? Fik linket her fra en anden i dette spm. http://www.eksperten.dk/spm/678648
Avatar billede olebole Juniormester
01. februar 2006 - 14:08 #11
Du kunne prøve at skrive dette i et dokument og kalde det 'test.asp':

<%
Function saveXml() {
    Dim xmlDoc, root, newElem
    Set xmlDoc = CreateObject("Msxml2.DOMDocument.3.0")
    xmlDoc.async = false
    xmlDoc.load("test.xml")
    Set root = xmlDoc.documentElement
    Set newElem = xmlDoc.createElement("tag")
    root.appendChild newElem
    root.lastChild.setAttribute "name","YES"
    xmlDoc.save "test.xml"
    saveXml = "Jeg tror zq, skidtet virker"
End Function

Response.Write saveXml()
%>

Prøv så at kalde det i en browser og se, hvad der sker  :)
Avatar billede olebole Juniormester
01. februar 2006 - 14:09 #12
Linje:
    xmlDoc.load("test.xml")
- skal i øvrigt nok være:
    xmlDoc.load "test.xml"
Avatar billede olebole Juniormester
01. februar 2006 - 14:17 #13
- og du kan også prøve dette:

<script type="text/jscript" language="JScript" runat="server">
function saveXml(e) {
    var xmlDoc, root, newElem;
    xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
    root;
    newElem;
    xmlDoc.async = false;
    xmlDoc.load("test.xml");
    root = xmlDoc.documentElement;
    newElem = xmlDoc.createElement("tag");
    root.appendChild(newElem);
    root.lastChild.setAttribute("name","YES");
    xmlDoc.save("test.xml");
    return "Jeg tror zq, skidtet virker";
}
Response.Write( saveXml() );
</script>

Begge dele er ganske utestet, da jeg har en IIS i nærheden at teste på.
Det kan således godt være, du skal skrive den fulde serversti til XML-dokumentet - begge de steder, det forekommer i koden ... altså: "C:/sti/på/serveren/til/test.xml"
Avatar billede olebole Juniormester
01. februar 2006 - 14:18 #14
"... da jeg ikke har en IIS i nærheden at teste på."  ;o)
Avatar billede jakwag Nybegynder
01. februar 2006 - 14:40 #15
Nu har jeg

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<%
Function saveXml()
    Dim xmlDoc, root, newElem
    Set xmlDoc = CreateObject("Msxml2.DOMDocument.3.0")
    xmlDoc.async = false
    xmlDoc.load("test.xml")
    Set root = xmlDoc.documentElement
    Set newElem = xmlDoc.createElement("tag")
    root.appendChild newElem
    root.lastChild.setAttribute "name","YES"
    xmlDoc.save "test.xml"
    saveXml = "Jeg tror zq, skidtet virker"
End Function

Response.Write saveXml()
%>
</body>
</html>

Den giver mig fejlen:

Microsoft VBScript runtime error '800a01a8'

Object required: 'root'

/dataentry/aspxml/savexml.asp, line 18

linie 18 er:
root = xmlDoc.documentElement;
Avatar billede olebole Juniormester
01. februar 2006 - 14:47 #16
Du skal ikke skrive noget somhelst HTML ... det har du ikke noget at bruge til.

Dernæst skal du foretage rettelsen (01/02-2006 14:09:59) - samt skrive hele serverstien til xml-dokumentet. Så burde det fungere uden problemer  :)
Avatar billede jakwag Nybegynder
01. februar 2006 - 14:56 #17
Jeg vil gerne takke dig for din store tålmodighed... Men det virker stadig ikke. Den siger stadig at der er fejl i den samme linie som nu er linie 9:

<%
Function saveXml()
    Dim xmlDoc, root, newElem
    Set xmlDoc = CreateObject("Msxml2.DOMDocument.3.0")
    xmlDoc.async = false
    xmlDoc.load "http://www.contentdepot.dk/dataentry/aspxml/test.xml"
    Set root = xmlDoc.documentElement
    Set newElem = xmlDoc.createElement("tag")
    root.appendChild newElem
    root.lastChild.setAttribute "name","YES"
    xmlDoc.save "http://www.contentdepot.dk/dataentry/aspxml/test.xml"
    saveXml = "Jeg tror zq, skidtet virker"
End Function

Response.Write saveXml()
%>

Det virker som om at den ikke mener at root er defineret rigtigt: Object required: 'root'
Avatar billede olebole Juniormester
01. februar 2006 - 15:03 #18
Det er ikke, hvad jeg skrev:
  '... du skal skrive den fulde serversti til XML-dokumentet - begge de steder, det forekommer i koden ... altså: "C:/sti/på/serveren/til/test.xml"'.

Det er _serverstien_, du skal skrive - hvordan den så end ser ud  ;o)
Avatar billede olebole Juniormester
01. februar 2006 - 15:08 #19
Du kan bruge 'Server.MapPath' til at finde serverstien med:

<%
Function saveXml()
    Dim xmlDoc, root, newElem, serverPath
    serverPath = Server.MapPath("/dataentry/aspxml/test.xml")
    Set xmlDoc = CreateObject("Msxml2.DOMDocument.3.0")
    xmlDoc.async = false
    xmlDoc.load serverPath
    Set root = xmlDoc.documentElement
    Set newElem = xmlDoc.createElement("tag")
    root.appendChild newElem
    root.lastChild.setAttribute "name","YES"
    xmlDoc.save serverPath
    saveXml = "Jeg tror zq, skidtet virker"
End Function

Response.Write saveXml()
%>
Avatar billede jakwag Nybegynder
01. februar 2006 - 15:09 #20
YEPSKI!

1000 tak kom med et svar så skal du få nogle meget velfortjente point.
Avatar billede olebole Juniormester
01. februar 2006 - 15:18 #21
- selvtak  ;o)
Avatar billede olebole Juniormester
01. februar 2006 - 15:45 #22
- og tak for points  :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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