2013-04-14 7 views
1

Я пытаюсь преобразовать входной Xhtml для вывода яваскрипта, мой вклад заключается в следующем:XHTML для яваскрипта выхода через XSLT

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>My page</title> 
</head> 

<body> 
    <ul> 
    <li><a href="page.html">about page</a></li> 

    <li><a href="ipsum.html">ipsum</a></li> 

    <li>there is a text right there 

     <ul> 

     <li><a href="dolor.html">dolor</a></li> 

     <li><a href="yeah.html">yeah</a></li> 

    </ul> 
</ul> 
</body> 
</html> 

И я хочу, чтобы Produt выходного файла в одной строке Javascript для повторного использования для меню, например:

var mytree=""; 
mytree=' <ul><li><a href="page.html">about page</a></li><li><a href="ipsum.html">ipsum</a></li><li>there is a text right there<ul><li><a href="dolor.html">dolor</a></li> <li><a href="yeah.html">yeah/a></li></ul></ul>'; 

Как я могу произвести это посредством преобразования xsl? Я попытался это:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:html="http://www.w3.org/1999/xhtml" 
    exclude-result-prefixes="html" 
    version="2.0"> 
    <xsl:output media-type="text/xml" method="xml" indent="no" omit-xml-declaration="yes" ></xsl:output> 
    <xsl:strip-space elements="html:*"/> 
    <xsl:template match="html:html"> 
    <xsl:text disable-output-escaping="yes">toctree='</xsl:text> 
<xsl:apply-templates select="html:body"/> 
    <xsl:text disable-output-escaping="yes">';</xsl:text>   
    </xsl:template>  
    <xsl:template name="copy" match="html:ul| html:li | html:a" > 
     <xsl:element name="{local-name()}"><xsl:for-each select="@*"> 
       <xsl:attribute name="{local-name()}"> 
        <xsl:value-of select="replace(., '\n', '')" /> 
       </xsl:attribute> 
      </xsl:for-each> 
      <xsl:apply-templates /> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

Это работает для меня, но всегда есть много разрывов строк ... и мне нужно одну строку, чтобы определить переменную mytree.

Благодаря

ответ

1

Просто добавьте этот шаблон предоставленной трансформации:

<xsl:template match="text()"> 
<xsl:value-of select="normalize-space()"/> 
</xsl:template> 

Полная трансформация в настоящее время становится:

<xsl:stylesheet version="2.0" id="" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:html="http://www.w3.org/1999/xhtml" exclude-result-prefixes="html"> 
    <xsl:output media-type="text/xml" method="xml" indent="no" omit-xml-declaration="yes"/> 
    <xsl:strip-space elements="html:*"/> 

    <xsl:template match="html:html"> 
     <xsl:text disable-output-escaping="yes">toctree='</xsl:text> 
     <xsl:apply-templates select="html:body"/> 
     <xsl:text disable-output-escaping="yes">';</xsl:text> 
    </xsl:template> 

    <xsl:template name="copy" match="html:ul| html:li | html:a" > 
     <xsl:element name="{local-name()}"> 
      <xsl:for-each select="@*"> 
       <xsl:attribute name="{local-name()}"> 
        <xsl:value-of select="replace(., '\n', '')" /> 
       </xsl:attribute> 
      </xsl:for-each> 
      <xsl:apply-templates /> 
     </xsl:element> 
    </xsl:template> 

    <xsl:template match="text()"> 
    <xsl:value-of select="normalize-space()"/> 
    </xsl:template> 
</xsl:stylesheet> 

и при нанесении на поставленном XML документ:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>My page</title> 
</head> 

<body> 
    <ul> 
    <li><a href="page.html">about page</a></li> 

    <li><a href="ipsum.html">ipsum</a></li> 

    <li>there is a text right there 

     <ul> 

     <li><a href="dolor.html">dolor</a></li> 

     <li><a href="yeah.html">yeah</a></li> 
     </ul> 
    </li> 
    </ul> 
</body> 
</html> 

разыскиваемого, результат один-линия производства:

toctree='<ul><li><a href="page.html">about page</a></li><li><a href="ipsum.html">ipsum</a></li><li>there is a text right there<ul><li><a href="dolor.html">dolor</a></li><li><a href="yeah.html">yeah</a></li></ul></li></ul>'; 
+0

Отлично! спасибо за вашу помощь @Dimitre Novatechev – Zatla00

+0

@ Zatla00, добро пожаловать. –

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