【问题标题】:xhtml to javascript output through xsltxhtml 到 javascript 通过 xslt 输出
【发布时间】:2013-04-06 23:03:33
【问题描述】:

我正在尝试将 xhtml 输入转换为 javascript 输出,我的输入如下:

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

我想在单行 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。

谢谢

【问题讨论】:

    标签: javascript xslt xhtml xslt-2.0


    【解决方案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>';
    

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 2011-12-16
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多