2016-03-24 12 views
-1

Ich habe schon zu lange daran herumgebastelt und finde die Antwort nirgendwo - oder vielleicht weiß ich nicht, wie ich die Fragen formulieren soll.XSLT mit Namespace im Wurzelelement

Ich habe eine XML-Datei, die eine Sitemap darstellt.

<?xml version="1.0" encoding="UTF-8"?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
    <url> 
     <loc>http://...</loc> 
     <pagetitle>English</pagetitle> 
     <children> 
     <url> 
      <loc>http://...</loc> 
      <pagetitle>page title</pagetitle> 
     </url> 
     <children> 
      ... 

Dieses XML stellt eine Sitemap dar. Ich habe eine XSLT geschrieben, um daraus eine hierarchische Liste zu machen.

<?xml version="1.0" encoding="UTF-8"?> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="html" indent="yes" version="4.0"/> 

    <xsl:template match="/"> 
     <ul><xsl:apply-templates /></ul> 
    </xsl:template> 

    <xsl:template match="url"> 
     <li><a href="{loc}"><xsl:value-of select="pagetitle"/></a></li> 
     <xsl:apply-templates select="children"/> 
    </xsl:template> 

    <xsl:template match="children"> 
     <ul><xsl:apply-templates select="url"/></ul> 
    </xsl:template> 

</xsl:stylesheet> 

Dieses Stylesheet funktioniert nicht, wenn ich <urlset xmlns="..>, aber wenn ich den Knoten ändern, nur <xmlns> (ohne das Attribut) zu verwenden, es funktioniert.

Ich bin weit von einem XSLT-Guru. Hat jemand einen Vorschlag?

+0

Dies ist eine sehr oft gestellte Frage - machen Sie eine Suche nach * Namespace *. –

+0

Wenn Sie den Titel Ihrer Frage in das SO-Suchfeld eingeben, erhalten Sie 125 Treffer zu fast identischen Fragen. Wie konntest du sie nicht finden? –

Antwort

0

Es gefunden. Ich habe das gerade zu meiner XSLT hinzugefügt, die anscheinend eine Kopie davon erstellt, aber Namespaces entfernt.

<!-- by default, copy all nodes --> 
    <xsl:template match="*" mode="copy-no-namespaces"> 
     <xsl:element name="{local-name()}"> 
      <xsl:copy-of select="@*"/> 
      <xsl:apply-templates select="node()" mode="copy-no-namespaces"/> 
     </xsl:element> 
    </xsl:template> 
+0

Sie sollten stattdessen gefunden haben: http://stackoverflow.com/questions/34758492/xslt-transform-doesnt-work-until-i-remove-root-node/34762628#34762628 (zum Beispiel). –

Verwandte Themen