2016-03-24 2 views
-1

Я слишком долго занимался этим и не могу найти ответ нигде - или, может быть, я не знаю, как сформулировать вопросы.XSLT с пространством имен в корневом элементе

У меня есть XML-файл, который представляет собой карту сайта.

<?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> 
      ... 

Этот XML представляет собой карту сайта. Я написал XSLT, чтобы превратить это в иерархический список.

<?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> 

Эта таблица стилей не работает, когда у меня есть <urlset xmlns="..>, но если я изменить узел использовать только <xmlns> (без атрибута) он работает.

Я далек от гуру XSLT. У кого-нибудь есть предложение?

+0

Это очень часто задаваемый вопрос - выполните поиск * namespace *. –

+0

Ввод названия вашего вопроса в поле поиска SO получает 125 ударов по почти одинаковым вопросам. Как вы могли их не найти? –

ответ

0

Найдено. Я просто добавил это в свой XSLT, который, по-видимому, делает его копию, но разделяет пространства имен.

<!-- 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

Вы должны были найти: http://stackoverflow.com/questions/34758492/xslt-transform-doesnt-work-until-i-remove-root-node/34762628#34762628 (например). –

Смежные вопросы