Stijn Vanden Eynde Geplaatst: 21 maart 2018 Delen Geplaatst: 21 maart 2018 Hallo allemaal, Ik zou volgende xml willen importeren <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Products> <Product id="3001" name="product1" /> <Product id="3002" name="product2" /> </Products> met behulp van deze xsl <?xml version='1.0' encoding='UTF-8'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult"> <METADATA> <FIELD NAME="product_id" TYPE="NUMBER"/> <FIELD NAME="product_name" TYPE="TEXT"/> </METADATA> <RESULTSET> <xsl:for-each select="Product"> <ROW> <COL><DATA><xsl:value-of select="@id"/></DATA></COL> <COL><DATA><xsl:value-of select="@name"/></DATA></COL> </ROW> </xsl:for-each> </RESULTSET> </FMPXMLRESULT> </xsl:template> </xsl:stylesheet> Helaas worden er geen records geïmporteerd. Er staat ook geen data in het gegenereerde fmpxmlresult. Als de gegevens tussen xml-tags staan is er geen probleem. De xml van een extern programma, dus het formaat kan ik niet wijzigen. Kan dit opgelost worden ? Quote Link naar reactie
0 menno Geplaatst: 21 maart 2018 Delen Geplaatst: 21 maart 2018 wijzig: <xsl:template match="/"> in: <xsl:template match="*"> of <xsl:template match="Products"> en dan werkt je stylesheet prima Quote Link naar reactie
0 Stijn Vanden Eynde Geplaatst: 26 maart 2018 Auteur Delen Geplaatst: 26 maart 2018 @Menno bedankt voor je antwoord. Je suggestie werkte voor een zelfgeschreven xml, helaas niet voor de xml die uit het ander programma komt. Dit is een summier voorbeeld van hoe de xml van het ander programma er uit ziet: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Container xmlns="http://url.to.vendor.com"> <Products> <Product name="product-naam"/> </Products> </Container> Het probleem zit in het feit dat er een xmlns attribuut is gedefinieerd in Container. Als ik die definitie verwijder, werkt de xsl omzetting zoals verwacht. Voorlopig probeer ik het op te lossen door de xml eerst met behulp van php om te zetten naar json. Ter referentie, de php om xml om te zetten naar json: <?php $xml = simplexml_load_string($_POST['xml_content']); $json = json_encode($xml); header('Content-Type: application/json'); echo $json; Hierdoor kan ik dan de volgende code schrijven: Insert from URL [ Select ; With dialog: Off ; $json ; $url_to_php ; cURL options: $post_opts ] Set Variable [ $product_name ; JSONGetElement( $json ; "Container.Products.Product[0].@attributes.name" ) ] Deze manier werkt ook goed, maar ik verkies toch liever een xsl methode. Alle hulp of feedback is altijd welkom. Quote Link naar reactie
0 menno Geplaatst: 26 maart 2018 Delen Geplaatst: 26 maart 2018 Als een xml een namespace heeft, dan hoef je alleen maar de namespace in je xsl op te nemen: <?xml version='1.0' encoding='UTF-8'?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:vdr="http://url.to.vendor.com"> <xsl:template match="*"> <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult"> <METADATA> <FIELD NAME="product_name" TYPE="TEXT"/> </METADATA> <RESULTSET> <xsl:for-each select="vdr:Products/vdr:Product"> <ROW> <COL> <DATA> <xsl:value-of select="@name"/> </DATA> </COL> </ROW> </xsl:for-each> </RESULTSET> </FMPXMLRESULT> </xsl:template> </xsl:stylesheet> Het gaat daarbij om de toevoeging: xmlns:vdr="http://url.to.vendor.com" én om de toevoeging vdr: in select="vdr:Products/vdr:Product" de toevoeging vdr is geheel arbitrair, daar had net zo goed mijnverzonnennamespace oid kunnen staan. In het x-path had dan dié namespace moeten worden gebruikt, nu is dat vdr. Je basisdocument heeft een namespace en die moet je dan ook gebruiken in de xsl. Je ziet soms ook dat een deel van een document een namespace heeft en een deel niet. Om iets te kunnen selecteren in het deel zonder namespace, moet je er zelf eentje toevoegen .... dit is een puntje dat xml/xsl voor veel mensen lastig maakt om te doorgronden. Weet je dit niet, dan kan je erg lang zoeken naar de oplossing. Het is in elk geval niet nodig om via php wat om te vormen Quote Link naar reactie
0 Stijn Vanden Eynde Geplaatst: 26 maart 2018 Auteur Delen Geplaatst: 26 maart 2018 Ik had iets langer moeten zoeken alvorens hier te posten... want 5 minuten na mijn post vond ik op een engels forum hetzelfde antwoord als het jouwe. Bij het importeren van een xml van een ander programma had ik geen problemen, maar die had dan ook geen namespace gedefinieerd. Deze dus wel, en achteraf gezien is het ook logisch dat het omwille van namespaces niet werkt. Toch bedankt voor de hulp ! Quote Link naar reactie
Vraag
Stijn Vanden Eynde
Hallo allemaal,
Ik zou volgende xml willen importeren
met behulp van deze xsl
Helaas worden er geen records geïmporteerd. Er staat ook geen data in het gegenereerde fmpxmlresult.
Als de gegevens tussen xml-tags staan is er geen probleem. De xml van een extern programma, dus het formaat kan ik niet wijzigen.
Kan dit opgelost worden ?
Link naar reactie
4 antwoorden op deze vraag
Aanbevolen berichten
Doe mee aan dit gesprek
Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.