webForumDet fria alternativet

Hur får jag informationen till min sida?

XML

36 svar · 2 618 visningar · startad av oskars

Medlem sedan nov. 20051 317 inlägg
Frågan#1

Tjenare,

nu ska vi se om jag kan förklara mitt problem så att ni förstår.

Jag har köpt en tjänst som gör att jag får fram olika data från ett företags databas.

Det funkar så här:

Jag har ett formulär på min ASP-sida som postar till deras sokmotor.asmx.
När jag postat formuläret så får jag fram en XML-sida med den datan jag fått fram i sökningen.

Men hur sjutsingen kan jag ta denna XML-koden och skriva ut den snyggt och prydligt och så där? Nu får jag ju bara fram en XML-sida från deras server.. vill ju ha in den i mitt system...

Jag har säkert snurrat till det någonstans...

Tacksam för hjälp!

Mvh
Oskar

Medlem sedan sep. 20025 506 inlägg
#2

XSLT

Medlem sedan nov. 20051 317 inlägg
#3

hm... Okej! Tack!

Men när jag postat formuläret så får jag ju upp XML-dokumentet i ett fönster från Deras server... Om jag vill ha in stylesheetet så måste jag ju i så fall spara hem XML-dokumentet till min dator? Eller tänker jag fel?

EDIT: Så här ser filerna ut som jag får fram med formuläret (nu visar den bara två träffar, men det kan vara mkt fler):

<?xml version="1.0" encoding="utf-8"?>
<SearchResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.domain.se">
  <HitCount>2</HitCount>
  <PersonNumber>
    <string>123456</string>
    <string>123456</string>
  </PersonNumber>
  <FirstName>
    <string>Emanuel</string>
    <string>Per</string>
  </FirstName>
  <LastName>
    <string>Sunding</string>
    <string>Larssno</string>
  </LastName>
  <GivenName>
    <string />
    <string>Per</string>
  </GivenName>
  <Address>
    <string>Gatan 2</string>
    <string>Hyttan 93</string>
  </Address>
  <ZipCode>
    <string>12525</string>
    <string>12552</string>
  </ZipCode>
  <City>
    <string>Stockholm</string>
    <string>Karlstad</string>
  </City>
</SearchResult>
Medlem sedan nov. 20051 317 inlägg
#4

Jag försöker med det här XSL-stylesheetet:

<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <h2>Mina personnummer</h2>
    <table border="1">
    <tr bgcolor="#9acd32">
      <th align="left">Förnamn</th>
      <th align="left">Efternamn</th>
      <th align="left">Adress</th>
      <th align="left">Postnummer</th>
      <th align="left">Ort</th>
      <th align="left">Personnummer</th>
    </tr>
    <xsl:for-each select="SearchResult">
    <tr>      
      <th align="left"><xsl:value-of select="SearchResult/FirstName/string" /></th>
      <th align="left"><xsl:value-of select="SearchResult/Lastname/string" /></th>
      <th align="left"><xsl:value-of select="SearchResult/Address/string" /></th>
      <th align="left"><xsl:value-of select="SearchResult/ZipCode/string" /></th>
      <th align="left"><xsl:value-of select="SearchResult/City/string" /></th>
      <th align="left"><xsl:value-of select="SearchResult/PersonNumber/string" /></th>
    </tr>
    </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Men det går så klart åt helvete :(

Medlem sedan nov. 20014 054 inlägg
#5

är det asp 3.0 du kör med?

I sådana fall skulle väl kanske någon form av XML parser kunna användas, för att komma närmast. Alternativt använda javascript.. men det är kanske inte ultimat. :)

Medlem sedan nov. 20051 317 inlägg
#6

Vet inte vilken version av ASP jag använder. Det är det vanliga som följer med IIS. Se mitt exempel ovan :)

Mitt problem är ju att jag inte vet hur jag ska skriva ut datan så det funkar i XHTML, och hur jag får in stylesheetet när jag itne har dokumentet på servern :r

Medlem sedan nov. 20014 054 inlägg
#7

oskars skrev:

Vet inte vilken version av ASP jag använder. Det är det vanliga som följer med IIS. Se mitt exempel ovan :)

Mitt problem är ju att jag inte vet hur jag ska skriva ut datan så det funkar i XHTML, och hur jag får in stylesheetet när jag itne har dokumentet på servern :r

:)

Om det nu inte är ASP.NET utan hederliga ASP dvs (3.0) så kan man använda en XML Parser, alt. läsa in XML-resultatet och skriva ut det på ex. filen.asp och dynamiskt kasta in textsnutten

<?xml-stylesheet type="text/xsl" href="dinxsltfil.xsl"?>

efter

<?xml version="1.0" encoding="ISO-8859-1"?>

Finns säkert enklare alternativ... men ..

Medlem sedan nov. 20051 317 inlägg
#8

jo men... problemet är ju att XML-dokumentet inte ligger på min server :( Jag vill inte behöva spara ner det varje gång för det ska användas mkt mkt!

EDIT: Nej, det är inte .NET =)

Medlem sedan juni 200032 967 inlägg
#9

Använd MSXML. Läs in dokumentet från den externa servern till ett DOM-objekt.
Sedan kan du antingen transformera med xsl(t), eller gå igenom datat och slänga ut det i html eller spara det på ett annat ställe.

Ett lite modifierat Peter S-förslag (källa: http://www.webforum.nu/showthread.php?p=1256730#post1256730) :

Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "GET", "http://foo.se/bar.xml", False
objHTTP.Send
str = objHTTP.responseText
Set objHTTP = Nothing

set objDOM = Server.CreateObject ("msxml2.domdocument")
objDOM.loadXML str

response.Write objDOM.xml

Nu har du ett DOM-objekt med xml-dokumentet i. Bara att transformera!

Medlem sedan nov. 20051 317 inlägg
#10

@nders skrev:

Använd MSXML. Läs in dokumentet från den externa servern till ett DOM-objekt.
Sedan kan du antingen transformera med xsl(t), eller gå igenom datat och slänga ut det i html eller spara det på ett annat ställe.

Ett lite modifierat Peter S-förslag (källa: http://www.webforum.nu/showthread.php?p=1256730#post1256730) :

Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "GET", "http://foo.se/bar.xml", False
objHTTP.Send
str = objHTTP.responseText
Set objHTTP = Nothing

set objDOM = Server.CreateObject ("msxml2.domdocument")
objDOM.loadXML str

response.Write objDOM.xml

Nu har du ett DOM-objekt med xml-dokumentet i. Bara att transformera!

Tack Anders!

Jag skickar ju formuläret med POST.

Kan jag göra så här kanske direkt:
objHTTP.Open "POST", "https://www2.domain.se/Search.asmx/Search", False

Och på något sätt få in sökparametrarna där?

Medlem sedan nov. 20051 317 inlägg
#11

EDIT: Vad menar du med att "transformera"? Är det när man skriver ut all data så som man vill ha den?

Testar lite här, men den verkar inte skriva ut XML-koden som den ska?

<%
	Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
	objHTTP.Open "GET", "http://www.w3schools.com/XML/note.xml", False
	objHTTP.Send
	str = objHTTP.responseText
	Set objHTTP = Nothing
		
	Set objDOM = Server.CreateObject ("msxml2.domdocument")
	objDOM.loadXML str
	
	Response.Write objDOM.xml
%>

EDIT: Jag tror jag fattar att XML-filen finns i objDOM.xml och att jag ska transformera det som finns i objDOM.xml... men hur ska jag ...hm.... ska jag skapa en XSL-fil (xml-stylesheet) och... ptja... hur fan ska jag kunna lägga in så att objDOM.xml ska styleas med min XSL-fil ?

Medlem sedan juni 200032 967 inlägg
#12

Kan jag göra så här kanske direkt:
objHTTP.Open "POST", "https://www2.domain.se/Search.asmx/Search", False

Tja, typ. Kanske - jag vet inte riktigt vad det är för sökning du gör. Men visst kan du skicka data (antingen med post eller get), det finns massor av exempel både här på webForum och på googgel eller vad det nu heter. =)

Testar lite här, men den verkar inte skriva ut XML-koden som den ska?

Jag vet inte om det är så att inte w3schools skickar xml:en till dig - prova att lägga upp en egen xml-fil att testa med.

- - - -

Med "transformera" menar jag att med hjälp av ett xsl-dokument formatera om xml-koden till något läsbart - exempelvis HTML.

Medlem sedan juni 200032 967 inlägg
#13

men hur ska jag ...hm.... ska jag skapa en XSL-fil (xml-stylesheet) och... ptja... hur fan ska jag kunna lägga in så att objDOM.xml ska styleas med min XSL-fil ?

http://www.cyberciti.biz/tips/wp-content/uploads/2006/11/i-will-use-google-b4-dump-question-bart.png ;-)

Medlem sedan nov. 20051 317 inlägg
#14

Okej, har sökt massa på google nu.

Kan det vara något sånt här man får göra?

set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(minfil.xsl)

Hur parar jag isf ihop det här med ditt exempel?

:r

Medlem sedan nov. 20014 054 inlägg
#15

oskars skrev:

Okej, har sökt massa på google nu.

Kan det vara något sånt här man får göra?

set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(minfil.xsl)

Hur parar jag isf ihop det här med ditt exempel?

:r

Jag hittade ett WS-exempel på nätet samt en asp-klass man kan använda för att underlätta inhämtning av data och så från en Webservice.

Ex. på kod

<!--#include virtual="/webservice.asp"-->
<%
	dim ws, xmltext
 
	set ws = new webservice
	ws.url = "http://localhost/Service1.asmx"
	ws.method = "HelloWorld"
	ws.Parameters.Add "Namn","Fredrik" 
	ws.execute
	xmltext = ws.response 

	set ws = nothing

	Dim xslDoc, xmlDoc

	Set xmlDoc= Server.CreateObject ("msxml2.domdocument.4.0")
	xmlDoc.loadXML xmltext

	set xslDoc = Server.CreateObject("msxml2.domdocument.4.0")
	xslDoc.async = false
	xslDoc.load Server.MapPath("test.xsl")

' tranformeringen till XHTML av test.xsl
	Response.Write xmlDoc.transFormNode(xslDoc)
%>

Bifogar filerna i source.rar, skall innehålla:
webservice.asp (webservice klassen)
test.xsl (xsl filen)
test.asp (filen som koden ovan kommer från)

Hoppas det ger en spark påvägen.. men annars

	Set xmlDoc= Server.CreateObject ("msxml2.domdocument.4.0")
	xmlDoc.loadXML xmltext

	set xslDoc = Server.CreateObject("msxml2.domdocument.4.0")
	xslDoc.async = false
	xslDoc.load Server.MapPath("test.xsl")

' tranformeringen till XHTML av test.xsl
	Response.Write xmlDoc.transFormNode(xslDoc)

Är väl detta som är själv transformeringen... xmltext är texten i xmldokumentet som skall transformeras.

Medlem sedan nov. 20051 317 inlägg
#16

Tack Fredde!

Kommer jag behöver modda webservice.asp något? Fattar inte mkt av den.

Angående den här koden:

	set ws = new webservice
	ws.url = "http://localhost/Service1.asmx"

*** "method", brukar inte det vara POST eller GET? Varför står det HelloWorld?
	ws.method = "HelloWorld"

*** Är det här mina sökparametrar?
*** Parametrarna måste ju höra ihop med något.
*** Alltså form-inputen har ju ett namn t.ex name="myName"
*** Här får man ju inte med något "name"
	ws.Parameters.Add "Namn","Fredrik" 
	ws.execute
	xmltext = ws.response
Medlem sedan nov. 20014 054 inlägg
#17

oskars skrev:

Tack Fredde!
Kommer jag behöver modda webservice.asp något? Fattar inte mkt av den.

Här kommer lite förklaringar i efterhand av denna kod:

set ws = new webservice
ws.url = "http://localhost/Service1.asmx"
ws.method = "HelloWorld"
ws.Parameters.Add "Namn","Fredrik" 
ws.execute
xmltext = ws.response

Dim xslDoc, xmlDoc

Set xmlDoc= Server.CreateObject ("msxml2.domdocument.4.0")
xmlDoc.loadXML xmltext

set xslDoc = Server.CreateObject("msxml2.domdocument.4.0")
xslDoc.async = false
xslDoc.load Server.MapPath("test.xsl")

' tranformeringen till XHTML av test.xsl
Response.Write xmlDoc.transFormNode(xslDoc)

ws.method = syftar på webservice-metoden, se feta texten i länk http://localhost/Service1.asmx/HelloWorld

ws.Parameters.Add "ParameterName", ParameterValue
ParameterName, är namnet på parametern som skickas till Webservicen hos den som säljer "tjänsten", ex. "SocialSecurityNumber" eller något sådant :)

ParameterValue, kan vara ex. Request.Form("myName") eller Request.QueryString("myName") beroende på vad man lagt för method i formuläret.

ws.execute använd WebServicen, vi exekverar det hela för att hämta information vi vill ha.

ws.response xml-texten som returneras från WebServicen. Som vi sedan kan använda xmlDoc och xslDoc för att transformera ex ws.response till en fin XHTML-sida, så länge XSLT-stylesheetmallen är korrekt dvs.

Den WebService jag prövade mot skrev ut:

Hej, Fredrik

Det var en simpel HelloWorld, där webservice metoden hette HelloWorld i webservicen Service1

Om du nu förstår mina icke så pedagogiska beskrivningar..

Medlem sedan nov. 20051 317 inlägg
#18

TACK!!!!!!

Har jag förstått detta rätt nu... ska det se ut så här:

ws.Parameters.Add "CustomerLoginName", "mittLoginNanm", "UserLoginName", "mittUserName"

Annat exempel:

ws.Parameters.Add "CustomerLoginName", ""&myLoginName&"", "UserLoginName", ""&myUserNam&""

? :)

Medlem sedan nov. 20014 054 inlägg
#19

Nästan

Nästan

 
ws.Parameters.Add "CustomerLoginName", "mittLoginNamn"
ws.Parameters.Add "UserLoginName", "mittUserName"

De andra exemplet.

 
ws.Parameters.Add "CustomerLoginName", myLoginName
ws.Parameters.Add "UserLoginName", myUserName

En parameter per Add , så att säga

OT: "" & param & "" kan förenklas till param

Medlem sedan nov. 20051 317 inlägg
#20

GRYMT!!! Tack återigen!

Kan man kort och gott säga att det här är ett sätt att ladda in en XML-fil från en annan server in till min egna server, så att jag själv kan redigera XML-filen så som jag vill?

EDIT:

Jag får följande fel nu:

ASP Kod: ASP 0177
Fel nummer: -2147221005
Kategori: Serverobjekt
Rad: 40
Kolumn: -1
Beskrivning: Server.CreateObject misslyckades
Mer detaljerad: Ogiltig klassträng %>

Rad: 40 = Set xmlDoc = Server.CreateObject ("msxml2.domdocument.4.0")
Rad: 41 = xmlDoc.loadXML xmltext

264 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)