[JSCRIPT] Webservice XML parsen met XSLT probleem

Pagina: 1
Acties:

  • mabarto
  • Registratie: Februari 2001
  • Laatst online: 26-04 19:14
Ik wil via een GET naar een webservice het XML bericht uitlezen en deze parsen door een XSLT sheet.

Maar dit lukt helaas niet.

Het volgende XML bericht geeft de webservice terug als ik een aanroep doe naar de webservice:

[url="http://localhost/supplierService/supplierService.asmx/getSupplierInfo?supplierName=actebis"]http://localhost/supplierService/supplierService.asmx/getSupplierInfo?supplierName=actebis[/url]

===
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<Supplier xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
  <SupplierID>1</SupplierID>
  <Name>Actebis</Name>
  <Address />
  <ZipCode />
  <City />
  <Phone />
  <Fax />
  <Email />
  <Web>http://www.actebis.com</Web>
  <Other></Other>
</Supplier>

===

Mijn xsl ziet er zo uit:

===
code:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="ISO-8859-1" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" /> 
    <xsl:template match="/">
        <tr>
        <td>ID:<xsl:value-of select="SupplierID" /></td>
        <td>Name:<xsl:value-of select="Name" /></td>
        </tr>
    </xsl:template>
</xsl:stylesheet>

===

Op 1 of andere manier lukt het niet om die attributen uit te lezen van het xml bestand.

Ik heb ook geprobeerd om het xml bestand aan die xsl te koppelen en dan te proberen maar ik krijg gewoon niet die values terug die erin staan.

Wie weet een oplossing om dit gewoon met client side javascript te doen parsen.

De volgende code gebruik ik om het geheel vanuit een webservice aan te roepen en de bericht te parsen via een xsl.

===
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<html>
 <head>
   <title>Parsing</title>
   <script language="javascript">
    var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")
    xmlHttp.open("GET", "http://localhost/supplierService/supplierService.asmx/getSupplierInfo?supplierName=actebis", false)
    xmlHttp.send(null)
    if(xmlHttp.status == 200)
    {
        retXML=xmlHttp.responseStream
        var xmlDoc = new ActiveXObject("Msxml2.DOMDocument")
        xmlDoc.validateOnParse="true"
        xmlDoc.async="false"
        xmlDoc.load(retXML)

        var xslDoc = new ActiveXObject("Msxml2.DOMDocument")
        xslDoc.validateOnParse="true"
        xslDoc.async = false
        xslDoc.load("supplier.xsl")

        document.write(xmlDoc.transformNode(xslDoc))
    } else {
     alert("fout!");
    }
   </script>
 </head>
<body onload="init();">
</body>
</html>

===

Wie heeft enig vermoeden wat het probleem zou kunen zijn waarom die xsl niet goed geparsed wordt door die xml.

Alle hulp is welkom want ik kom er niet meer achter wat het nu zou kunnen zijn.

Het enige wat ik vermoed is dat die xml niet goed volgens de richtlijnen is maar als dat het geval is hoe kan ik in .NET C# dan aangeven hoe die xml eruit moet komen te zien?

Thanks a lot alvast voor de hulp

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
<td>ID:<xsl:value-of select="SupplierID" /></td>
Je matcht hier /SupplierID ipv /Supplier/SupplierID. Als je van <xsl:template match="/"> maakt <xsl:template match="/Supplier"> zou het moeten werken.

  • mabarto
  • Registratie: Februari 2001
  • Laatst online: 26-04 19:14
Op zondag 14 juli 2002 21:12 schreef marcusk het volgende:

[..]

Je matcht hier /SupplierID ipv /Supplier/SupplierID. Als je van <xsl:template match="/"> maakt <xsl:template match="/Supplier"> zou het moeten werken.
Het vreemde is dat dat niet werkt en ik krijg als resultaat alle values terug.

Dus ik krijg dit te zien:
code:
1
1Actebishttp://www.actebis.com

Heel erg vaag maar op 1 of andere manier pakt ie dat niet.

===
code:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="ISO-8859-1" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" /> 
    <xsl:template match="/Supplier">
        <tr>
        <td>ID:<xsl:value-of select="SupplierID" /></td>
        <td>Name:<xsl:value-of select="Name" /></td>
        </tr>
    </xsl:template>
</xsl:stylesheet>

===

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Ik zie het al; je invoer-xml gebruikt een namespace :)
Zo werkt ie wel (getest) :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:t="http://tempuri.org/">

  <xsl:output method="html" encoding="ISO-8859-1"/> 

  <xsl:template match="/">
    blaat:<br/>
    <table>
    <xsl:apply-templates select="t:Supplier"/>
    </table>
  </xsl:template>
  
  <xsl:template match="t:Supplier">
    <tr>
    <td>ID:<xsl:value-of select="t:SupplierID"/></td>
    <td>Name:<xsl:value-of select="t:Name"/></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>

  • mabarto
  • Registratie: Februari 2001
  • Laatst online: 26-04 19:14
Mijn dank is heel erg groot, het werkt! :)

Thanks a lot :P

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
barto018: XML bericht uitlezen en deze parsen door een XSLT sheet.
Even zeuren: je kan met XSLT helemaal niet parsen. Parsen is het omzetten van een stukje concrete syntax naar een parse-tree aan de hand van (meestal) een context-vrije grammatica.

Parsen kan je daarom eigenlijk ook zien als 'lezen'. Een stukje tekst wordt door de parser omgezet naar iets waar een applicatie iets mee kan: meestal in boom vorm.

XSLT is iets heel anders: XSLT is een transformatie taal voor XML. Met een XSL Transformatie en een XSLT processor kan je een XML document transformeren naar een ander XML document. De input en output is dus in feite een boom. De meeste XSLT processoren laten ook input toe vanuit een file of stream, maar deze input-vorm wordt dan simpelweg eerst geparsed door een XML parser.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mabarto
  • Registratie: Februari 2001
  • Laatst online: 26-04 19:14
Op zondag 14 juli 2002 23:27 schreef mbravenboer het volgende:

[..]

Even zeuren: je kan met XSLT helemaal niet parsen. Parsen is het omzetten van een stukje concrete syntax naar een parse-tree aan de hand van (meestal) een context-vrije grammatica.
Bedankt voor de goede opheldering van dit verhaal.
Je hebt inderdaad gelijk hierover.

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Op zondag 14 juli 2002 23:27 schreef mbravenboer iets waar de gemiddelde mier niet blij van wordt
;)

Today's subliminal thought is:

Pagina: 1