webForumDet fria alternativet

XML load and save

3 svar · 372 visningar · startad av roady

roadyMedlem sedan jan. 2002473 inlägg
#1

Hej, testar att ladda en xml fil, loopa igenom och lägga till CDATA i varje nodeValue. Behöver lite hjälp här.
Problemet är att den spara inte över själva node värdet utan lägger allt i rooten, vill ju bara ändra om det är ett nodeValue och inte när det är en , vad man nu säger, någon som har en massa childs.

Tack på förhand.

dim flashString,xmlObj,objLst
	flashString = Request.QueryString("XML")
	
	set xmlObj = Server.CreateObject("Microsoft.XMLDOM")
	xmlObj.async=false
	
	Set FSO = Server.CreateObject("Scripting.FileSystemObject")
	'xmlObj.loadXML(flashString)
	xmlObj.load(Server.MapPath(".")+"\"+flashString)
	If xmlObj.parseError.errorCode <> 0 Then
		Response.Write(xmlObj.parseError.errorCode)
	End If
	
	Set objLst = xmlObj.getElementsByTagName("*")
	response.Write(objLst.length)
	For i = 0 to objLst.length-1
		dim nodeText
		nodeText = objLst.item(i).text
		Response.Write("<br>"+nodeText)
		objLst.item(i).text = "<![CDATA["+nodeText+"]]>"
	Next
	
	xmlObj.save(Server.MapPath(".")+"\myXML_1.xml")
roadyMedlem sedan jan. 2002473 inlägg
#2

uppdatering...
Den loopas och gör allt rätt förutom att den automatiskt html encodar när värdet sparas om till xml filen, hur kan jag behålla utf-8 i asp???

dim flashString,xmlObj,objLst
	flashString = Request.QueryString("XML")
	
	set xmlObj = Server.CreateObject("Microsoft.XMLDOM")
		xmlObj.async=false
		xmlObj.load(Server.MapPath(".")+"\"+flashString)
	
	If xmlObj.parseError.errorCode <> 0 Then
		Response.Write(xmlObj.parseError.errorCode)
	End If
	
	Set objLst = xmlObj.getElementsByTagName("*")
	For i = 0 to objLst.length-1
		If objLst(i).firstChild.HasChildNodes Then
		
		Else
			dim nodeText
			nodeText = objLst(i).firstChild.nodeValue
			'Response.Write("<br>" & nodeText)
			pre = "<![CDATA["
			post = "]]>"
			objLst(i).firstChild.nodeValue = pre & nodeText & post
		End If
	Next
	
	xmlObj.save(Server.MapPath(".")+"\myXML_1.xml")
roadyMedlem sedan jan. 2002473 inlägg
#3

Ghaaaa, jag är hettsig och blir galen, av allt jag testat så funkar koden suveränt. Problemet är fortfarande att den slutgiltiga XML filen får html encodad text i sina node values.

Problemet verkar vara själva sparningen.
mlObj.save(Server.MapPath(".")+"\myXML_1.xml")

Finns det något annat sätt, kollade lite på ADODB.Stream och där verkar det som man kan sätta strömmen till utf-8, men jag får det inte att funka, på något sätt måste man då få xml objektet till strömmen och spara ner.

<%@ CodePage=65001 Language="VBScript"%>
<%
	Response.CodePage = 65001
	Response.CharSet = "utf-8"

	dim flashString,xmlObj,objLst,nodeText
	flashString = Request.QueryString("XML")
	
	set xmlObj = Server.CreateObject("Microsoft.XMLDOM")
		xmlObj.async=false
		xmlObj.load(Server.MapPath(".")&"\"&flashString)
	
	If xmlObj.parseError.errorCode <> 0 Then
		Response.Write(xmlObj.parseError.errorCode)
	End If
	
	Set objLst = xmlObj.getElementsByTagName("*")
	For i = 0 to objLst.length-1
		If objLst(i).firstChild.nodeType = 3 Then
			nodeText = objLst(i).firstChild.nodeValue
			pre = "<![CDATA["
			post = "]]>"
			objLst(i).firstChild.nodeValue = pre & nodeText & post			
		End If
	Next
%>
roadyMedlem sedan jan. 2002473 inlägg
#4

Någon som har tips på hur man kan lösa detta på annat sätt...

Alltså,
1.) få POST eller ladda in en xml fil.
2.) Gå igenom varje XML node och lägga till CDATA
3.) Spara xml filen

//Bäcker

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