gpt4 book ai didi

javascript - 通过xslt将xhtml转为javascript输出

转载 作者:行者123 更新时间:2023-11-28 02:18:42 25 4
gpt4 key购买 nike

我正在尝试将 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。

谢谢

最佳答案

只需将此模板添加到提供的转换中即可:

<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>';

关于javascript - 通过xslt将xhtml转为javascript输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16004903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com