{"id":55000449,"date":"2019-06-01T00:00:00","date_gmt":"2020-01-24T16:00:23","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=449"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"XMLDokumente_transformieren_mit_XSL","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html","title":{"rendered":"XML-Dokumente transformieren mit XSL"},"content":{"rendered":"<p class='introduction'>Im Artikel <b>Kategorie-XML-Export mit Transformation <\/b>haben wir an einem Praxisbeispiel gezeigt, wie Sie die Daten aus den beiden Tabellen Kategorien und Artikel exportieren und in eine andere Form bringen, als es der reine Export getan h&auml;tte. Im vorliegenden Artikel schauen wir uns nun an, welche M&ouml;glichkeiten die Transformation mit XSL grunds&auml;tzlich bietet und welche Rolle dabei die Sprache XPath spielt.<\/p>\n<h2>Beispieldatenbank<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>1903_XMLTransformieren.zip<\/b>.<\/p>\n<p>Eine tragende Rolle f&uuml;r die Beispiele der folgenden Seiten spielt die Funktion <b>Transformieren <\/b>aus Listing 1. Diese Funktion erwartet drei per Parameter &uuml;bergebene Werte: Den Pfad zur Quelldatei, den Pfad zur XSL-Datei und den Pfad der zu erstellenden Datei. Der vierte Parameter ist optional und liefert einen Text zu einem eventuell beim Parsen der beteiligten XML-Dokumente gefundenen Fehler zur&uuml;ck.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Transformieren(strQuelle<span style=\"color:blue;\"> As String<\/span>, strXSL<span style=\"color:blue;\"> As String<\/span>, strZiel<span style=\"color:blue;\"> As String<\/span>, <span style=\"color:blue;\">Optional<\/span> strFehler<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Long<\/span>\r\n      <span style=\"color:blue;\">Dim <\/span>objQuelle<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n      <span style=\"color:blue;\">Dim <\/span>objXSL<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n      <span style=\"color:blue;\">Dim <\/span>objZiel<span style=\"color:blue;\"> As <\/span>MSXML2.DOMDocument\r\n      <span style=\"color:blue;\">Set<\/span> objQuelle = <span style=\"color:blue;\">New<\/span> MSXML2.DOMDocument\r\n      objQuelle.Load strQuelle\r\n      <span style=\"color:blue;\">If <\/span>objQuelle.parseError = 0<span style=\"color:blue;\"> Then<\/span>\r\n          <span style=\"color:blue;\">Set<\/span> objXSL = <span style=\"color:blue;\">New<\/span> MSXML2.DOMDocument\r\n          objXSL.Load strXSL\r\n          <span style=\"color:blue;\">If <\/span>objXSL.parseError = 0<span style=\"color:blue;\"> Then<\/span>\r\n              <span style=\"color:blue;\">Set<\/span> objZiel = <span style=\"color:blue;\">New<\/span> MSXML2.DOMDocument\r\n              objQuelle.transformNodeToObject objXSL, objZiel\r\n              objZiel.Save strZiel\r\n          <span style=\"color:blue;\">Else<\/span>\r\n              Transformieren = objXSL.parseError.errorCode\r\n              strFehler = \".xsl-datei: \" & <span style=\"color:blue;\">vbCrLf<\/span> & strXSL & <span style=\"color:blue;\">vbCrLf<\/span> & objXSL.parseError.reason\r\n          <span style=\"color:blue;\">End If<\/span>\r\n      <span style=\"color:blue;\">Else<\/span>\r\n          Transformieren = objQuelle.parseError.errorCode\r\n          strFehler = \"Quelldatei: \" & <span style=\"color:blue;\">vbCrLf<\/span> & strQuelle & <span style=\"color:blue;\">vbCrLf<\/span> & objQuelle.parseError.reason\r\n      <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p class='imagetext'>Listing 1: Die Prozedur Transformieren<\/p>\n<p>Mit dieser Funktion werden wir die folgenden Beispiele dieses Artikels durchf&uuml;hren. Sie l&auml;dt als erstes das XML-Dokument aus <b>strQuelle <\/b>mit der <b>Load<\/b>-Methode in das <b>DOMDocument<\/b>-Element <b>objQuelle<\/b>. Dann pr&uuml;ft sie, ob das Dokument einen Fehler enth&auml;lt. Falls nicht, l&auml;dt sie das XSL-Dokument in die Variable <b>objXSL<\/b>.<\/p>\n<p>Auch hier folgt eine Pr&uuml;fung auf eventuelle Fehler beim Parsen der Datei. Erfolgt auch dies fehlerfrei, ruft die Prozedur die <b>transformNodeToObject<\/b>-Methode von <b>objQuelle <\/b>auf und &uuml;bergibt <b>objXSL <\/b>als ersten und <b>objZiel <\/b>als zweiten Parameter. Danach speichert sie das neu erstellte Objekt mit der <b>Save<\/b>-Methode des Objekts <b>objZiel<\/b>, und zwar unter dem Namen, der in der Variablen <b>strZiel <\/b>angegeben ist.<\/p>\n<p>Sollte an irgendeiner Stelle ein Fehler beim Parsen aufgetreten sein, liefert <\/p>\n<p>F&uuml;r all dies ist ein Verweis auf die Bibliothek <b>Microsoft XML, v3.0 <\/b>erforderlich. Es gibt zwar moderne Versionen dieser Bibliothek, aber wir verwenden diese, weil die XPath-Befehle damit besser funktionieren &ndash; mehr dazu im Artikel <b>XML-Dokumente mit XPath durchsuchen<\/b>.<\/p>\n<p>Diesen Verweis f&uuml;gen wir &uuml;ber den <b>Verweise<\/b>-Dialog hinzu, den Sie im VBA-Editor mit dem Men&uuml;eintrag <b>Extras|Verweise <\/b>aktivieren (siehe Bild 1).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_449_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_449_001.png\" alt=\"Hinzuf&uuml;gen eines Verweises auf die XML-Bibliothek\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Hinzuf&uuml;gen eines Verweises auf die XML-Bibliothek<\/p>\n<p>Wir gehen an dieser Stelle davon aus, dass Sie bereits eine Beispiel-XML-Datei erstellt haben, die im gleichen Verzeichnis wie die Datenbank liegt.<\/p>\n<h2>Fehler ausgeben<\/h2>\n<p>Um eventuell auftretende Fehler auszugeben, rufen wir die Prozedur <b>Transformieren <\/b>wie folgt auf und &uuml;bergeben dabei noch die Variable <b>strFehler<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Sub <\/span>TransformierenMitMeldungen()\r\n    <span style=\"color:blue;\">Dim <\/span>strFehler<span style=\"color:blue;\"> As String<\/span>\r\n    Transformieren CurrentProject.Path                         & \"\\KategorienUndArtikel.xml\",                                    CurrentProject.Path                         & \"\\KategorienUndArtikel.xsl\",            CurrentProject.Path & \"\\Transformiert.xml\",                                                strFehler\r\n    <span style=\"color:blue;\">Debug.Print<\/span> strFehler\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Tritt hier ein Fehler auf, wird dieser mit dem Parameter <b>strFehler<\/b> an die aufrufende Prozedur zur&uuml;ckgegeben. Diese gibt ihn dann im Direktbereich des VBA-Editors aus.<\/p>\n<h2>Beispieldokument als Quelle<\/h2>\n<p>Als Beispiel verwenden wir wie in einigen anderen Artikeln den Export der Tabelle <b>tblKategorien<\/b>, f&uuml;r die wir zus&auml;tzlich die Tabelle <b>tblArtikel <\/b>hinzugef&uuml;gt haben. Diese sieht in stark gek&uuml;rzter Form wie folgt aus:<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"UTF-8\">\r\n&lt;dataroot xmlns:od=\"urn:schemas-microsoft-com:officedata\" generated=\"2019-08-01T21:45:19\">\r\n&lt;tblKategorien>\r\n&lt;KategorieID>1&lt;\/KategorieID>\r\n&lt;Kategoriename>Getr&auml;nke&lt;\/Kategoriename>\r\n&lt;Beschreibung>Alkoholfreie Getr&auml;nke...&lt;\/Beschreibung>\r\n&lt;Abbildung>FRwvAAIAAAANAA4AFAAhAP...&lt;\/Abbildung>\r\n&lt;tblArtikel>\r\n&lt;ArtikelID>1&lt;\/ArtikelID>\r\n&lt;Artikelname>Chai&lt;\/Artikelname>\r\n&lt;LieferantID>1&lt;\/LieferantID>\r\n&lt;KategorieID>1&lt;\/KategorieID>\r\n&lt;Liefereinheit>10 Kartons x 20 Beutel&lt;\/Liefereinheit>\r\n&lt;Einzelpreis>9&lt;\/Einzelpreis>\r\n&lt;Lagerbestand>39&lt;\/Lagerbestand>\r\n&lt;BestellteEinheiten>0&lt;\/BestellteEinheiten>\r\n&lt;Mindestbestand>10&lt;\/Mindestbestand>\r\n&lt;Auslaufartikel>0&lt;\/Auslaufartikel>\r\n&lt;\/tblArtikel>\r\n...\r\n&lt;\/tblKategorien>\r\n...\r\n&lt;\/dataroot><\/pre>\n<p>Im einf&uuml;hrenden Beispiel des Artikels <b>Kategorie-XML-Export mit Transformation <\/b>haben wir aus diesem Dokument ein Dokument gemacht, das so aussieht, wie wir uns ein solches Dokument vorgestellt h&auml;tten, also etwa so:<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"UTF-16\">\r\n&lt;Bestellverwaltung xmlns=\"http:\/\/www.w3.org\/TR\/REC-html40\">\r\n  &lt;Kategorien>\r\n    &lt;Kategorie ID=\"1\">\r\n      &lt;Kategoriename>Getr&auml;nke&lt;\/Kategoriename>\r\n      &lt;Beschreibung>Alkoholfreie Getr&auml;nke, Kaffee,                                 Tee, Bier&lt;\/Beschreibung>\r\n      &lt;Artikelliste>\r\n        &lt;Artikel ID=\"1\">\r\n          &lt;Artikelname>Chai&lt;\/Artikelname>\r\n        &lt;\/Artikel>\r\n        ...\r\n      &lt;\/Artikelliste>\r\n    &lt;\/Kategorie>\r\n    ...\r\n  &lt;\/Kategorien>\r\n&lt;\/Bestellverwaltung><\/pre>\n<p>F&uuml;r die komplette XSL-Datei, die wir hier verwendet haben, verweisen wir Sie auf den Artikel <b>Kategorie-XML-Export mit Transformation<\/b>.<\/p>\n<h2>Kopf einer XSL-Datei<\/h2>\n<p>Die erste Zeile einer XSL-Datei sieht immer wie folgt aus:<\/p>\n<pre>&lt;xsl:stylesheet version=\"1.0\"\r\n   xmlns:xsl=\"http:\/\/www.w3.org\/1999\/XSL\/Transform\"\r\n   xmlns=\"http:\/\/www.w3.org\/TR\/REC-html40\"><\/pre>\n<h2>Dynamische und statische Anweisungen<\/h2>\n<p>Danach folgen einige weitere Anweisungen, die sich vor allem durch ein Merkmal unterscheiden: Sie beginnen entweder mit <b>&lt;xsl: <\/b>oder eben nicht. Wenn Sie schon einmal eine PHP- oder ASP-Seite programmiert haben, kennen Sie das Prinzip: Sie mischen dort HTML-Code und dynamische Skriptbestandteile.  Der HTML-Code wird 1:1 in das resultierende HTML-Dokument &uuml;bernommen, der PHP- oder ASP-Code f&uuml;gt weitere, dynamisch ermittelte Inhalte etwa aus einer Datenbank hinzu oder strukturiert die Inhalte etwa durch den Einsatz von Schleifen oder Bedingungen. Genau das Gleiche finden Sie auch in XSL-Dokumenten vor. Der Unterschied ist, dass die Daten, die im Zieldokument abgebildet werden sollen, aus dem Quelldokument stammen und nicht etwa aus einer Datenbank.<\/p>\n<h2>Das template-Element als Wurzelelement<\/h2>\n<p>Genau wie ein XML-Dokument hat auch das XSL-Dokument ein Wurzelelement, n&auml;mlich das Element <b>template<\/b>. Dieses verlangt zwingend nach der Angabe  des Parameters match. <b>match <\/b>gibt an, auf welches Element der Originaldatei sich die nachfolgenden Anweisungen beziehen beziehungsweise welches Element samt Unterelementen die Daten f&uuml;r das Zielelement liefern soll. Hier stellen wir <b>match <\/b>mit <b>&#8222;\/&#8220; <\/b>auf das Wurzelelement ein. Au&szlig;erdem wollen wir als Basis ein &ouml;ffnendes und schlie&szlig;endes Element namens <b>Bestellverwaltung <\/b>anlegen:<\/p>\n<pre>&lt;xsl:stylesheet version=\"1.0\"      xmlns:xsl=\"http:\/\/www.w3.org\/1999\/XSL\/Transform\">\r\n   &lt;xsl:template match=\"\/\">\r\n     &lt;Bestellverwaltung>\r\n     &lt;\/Bestellverwaltung>\r\n   &lt;\/xsl:template>\r\n&lt;\/xsl:stylesheet><\/pre>\n<p>Das Ergebnis sieht dann so aus:<\/p>\n<pre>&lt;xml version=\"1.0\" encoding=\"UTF-16\">\r\n&lt;Bestellverwaltung>&lt;\/Bestellverwaltung><\/pre>\n<h2>Zeilenumbr&uuml;che<\/h2>\n<p>Hier wollen wir nun zun&auml;chst einen Zeilenumbruch einf&uuml;gen, denn obwohl wir das &ouml;ffnende und schlie&szlig;ende <b>Bestellverwaltung<\/b>-Element in zwei Zeilen geschrieben haben, wird der Zeilenumbruch nicht in das Ergebnis &uuml;bernommen. Das gelingt nur, wenn das entsprechende Zeichen innerhalb eines &ouml;ffnenden und schlie&szlig;enden Elements <b>xsl:text <\/b>eingefasst wird, also etwa so:<\/p>\n<pre>&lt;Bestellverwaltung>\r\n &lt;xsl:text>\r\n &lt;\/xsl:text>\r\n &lt;\/Bestellverwaltung><\/pre>\n<h2>Einzelne Elemente des Quelldokuments ausgeben<\/h2>\n<p>Sie k&ouml;nnen auf einzelne Elemente des Quelldocuments mit dem Element <b>xsl:value-of <\/b>zugreifen und dabei den Pfad zu dem Element mit dem Attribut <b>select <\/b>angeben.<\/p>\n<p>Wenn sie etwa den Wert des ersten <b>KategorieID<\/b>-Elements unterhalb der Elemente <b>dataroot\/tblKategorien <\/b>ausgeben wollen, verwenden Sie:<\/p>\n<pre>&lt;xsl:value-of select=\"\/dataroot\/tblKategorien\/KategorieID\"\/><\/pre>\n<p>F&uuml;r das Feld <b>Kategoriename <\/b>nutzen Sie:<\/p>\n<pre>&lt;xsl:value-of select=\"\/dataroot\/tblKategorien\/Kategoriename\"\/><\/pre>\n<p>Sie m&uuml;ssen also den kompletten Pfad vom Wurzelelement aus angeben.<\/p>\n<pre>&lt;xsl:value-of select=\"\/dataroot\/tblKategorien\/KategorieID\"\/><\/pre>\n<p>Wenn es Elemente des Typs <b>KategorieID <\/b>nur an einer Stelle gibt, k&ouml;nnen Sie auch gezielt auf das erste &uuml;berhaupt verf&uuml;gbare Element <b>KategorieID <\/b>zugreifen:<\/p>\n<pre>&lt;xsl:value-of select=\"\/\/KategorieID\"\/><\/pre>\n<p>In diesem Fall bedeutet <b>\/\/<\/b>, dass an beliebiger Stelle unabh&auml;ngig von der Ebene gesucht wird.<\/p>\n<h2>Leerzeichen zwischen Elemente<\/h2>\n<p>&uuml;brigens k&ouml;nnen Sie auch Leerzeichen zwischen zwei zusammengesetzte Textelemente nur mit <b>xsl:text <\/b>einf&uuml;gen. Einfach ein Leerzeichen wie hier reicht nicht:<\/p>\n<pre>&lt;xsl:value-of select=\"\/\/KategorieID\"\/> <xsl:value-of select=\"\/\/Kategoriename\"\/><\/pre>\n<p>Stattdessen f&uuml;gen Sie das Leerzeichen in <b>xsl:text <\/b>eingefasst hinzu:<\/p>\n<pre>&lt;xsl:value-of select=\"\/\/KategorieID\"\/>&lt;xsl:text> &lt;\/xsl:text>&lt;xsl:value-of select=\"\/\/Kategoriename\"\/><\/pre>\n<h2>Schleifen mit for-each<\/h2>\n<p>Mit <b>xsl:value-of <\/b>greifen Sie nur auf den ersten gefundenen Wert zu. Wenn Sie alle Werte mit diesem Pfad zugreifen wollen, etwa in einer Schleife, k&ouml;nnen Sie <b>xsl:for-each <\/b>verwenden.<\/p>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Access &#091;basics&#093;<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/282\/access-basics?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 400 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000449\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/index.php\/data\/wp\/v2\/posts\/55000449?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/access-basics.de\/data\/wp\/v2\/posts\/55000449\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"a4912ba1e1\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Artikel <b>Kategorie-XML-Export mit Transformation <\/b>haben wir an einem Praxisbeispiel gezeigt, wie Sie die Daten aus den beiden Tabellen Kategorien und Artikel exportieren und in eine andere Form bringen, als es der reine Export getan h&auml;tte. Im vorliegenden Artikel schauen wir uns nun an, welche M&ouml;glichkeiten die Transformation mit XSL grunds&auml;tzlich bietet und welche Rolle dabei die Sprache XPath spielt.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662019,66032019,44000015],"tags":[],"class_list":["post-55000449","post","type-post","status-publish","format-standard","hentry","category-662019","category-66032019","category-Interaktiv"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>XML-Dokumente transformieren mit XSL - Access [basics]<\/title>\n<meta name=\"description\" content=\"Im Artikel Kategorie-XML-Export mit Transformation haben wir an einem Praxisbeispiel gezeigt, wie Sie die Daten aus den beiden Tabellen Kategorien und Artikel exportieren und in eine andere Form bringen, als es der reine Export getan h\u00e4tte. Im vorliegenden Artikel schauen wir uns nun an, welche M\u00f6glichkeiten die Transformation mit XSL grunds\u00e4tzlich bietet und welche Rolle dabei die Sprache XPath spielt.\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"XML-Dokumente transformieren mit XSL - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Im Artikel Kategorie-XML-Export mit Transformation haben wir an einem Praxisbeispiel gezeigt, wie Sie die Daten aus den beiden Tabellen Kategorien und Artikel exportieren und in eine andere Form bringen, als es der reine Export getan h\u00e4tte. Im vorliegenden Artikel schauen wir uns nun an, welche M\u00f6glichkeiten die Transformation mit XSL grunds\u00e4tzlich bietet und welche Rolle dabei die Sprache XPath spielt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-24T16:00:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_449_001.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"15\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"..\/tl_files\/images\/pic_449_001.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html\",\"name\":\"XML-Dokumente transformieren mit XSL - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html#primaryimage\"},\"datePublished\":\"2020-01-24T16:00:23+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"description\":\"Im Artikel Kategorie-XML-Export mit Transformation haben wir an einem Praxisbeispiel gezeigt, wie Sie die Daten aus den beiden Tabellen Kategorien und Artikel exportieren und in eine andere Form bringen, als es der reine Export getan h\\u00e4tte. Im vorliegenden Artikel schauen wir uns nun an, welche M\\u00f6glichkeiten die Transformation mit XSL grunds\\u00e4tzlich bietet und welche Rolle dabei die Sprache XPath spielt.\",\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/XMLDokumente_transformieren_mit_XSL.html\",\"name\":\"XML-Dokumente transformieren mit XSL\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000449","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000449"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000449\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000449"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000449"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}