我有一個HTML頁面,其中包含一些我試圖用XSLT 1.0解析的Javascript。我想修改Javascript中的一個URL,使路徑變爲絕對路徑而不是相對路徑。用XSLT替換Javascript內容
的JavaScript代碼看起來大致是這樣的:
<html>
<head>
<script>
function login() {
window.location = '{@myBase}/myloginpage';
}
</script>
</head>
<body>
...
</body>
</html>
我想要的 '{} @myBase' 與我的域名來代替。我覺得我非常偏離正軌。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:proxy="java:senselogic.sitevision.portlet.proxy.web.ProxyFunctions"
extension-element-prefixes="proxy">
<xsl:import href="template.xsl"/>
<xsl:template match="//script/text()">
<xsl:variable name="mypath">
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text"><xsl:value-of select="{@myBase}"/></xsl:with-param>
<xsl:with-param name="replace">{@myBase}</xsl:with-param>
<xsl:with-param name="by">http://www.mydomain.com</xsl:with-param>
</xsl:call-template>
</xsl:variable>
</xsl:template>
<xsl:template name="string-replace-all">
<xsl:param name="text" />
<xsl:param name="replace" />
<xsl:param name="by" />
<xsl:choose>
<xsl:when test="contains($text, $replace)">
<xsl:value-of select="substring-before($text,$replace)" />
<xsl:value-of select="$by" />
<xsl:call-template name="string-replace-all">
<xsl:with-param name="text"
select="substring-after($text,$replace)" />
<xsl:with-param name="replace" select="$replace" />
<xsl:with-param name="by" select="$by" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
轉化與XSLT的HTML頁面中的腳本的概念是,坦率地說,瘋狂。在不瞭解整體環境的情況下,很難肯定地說,但有人可能會注意到這是一個單行sed程序。其他選擇取決於誰擁有HTML,包括使用文本編輯器將{@myname}更改爲您的域。 :-)如果您可以將自己的腳本添加到頁面中,則可以使用String.replace進行單行處理。最重要的是,XSLT的核心是處理XML,它不是正確的方式來做文本的東西。是什麼讓你認爲你想使用XSLT? – 2012-12-11 17:06:51