2010-02-22 87 views
2

我想知道我怎麼能可能延長XSLT 1.0,這樣我可以在http://www.w3schools.com/Xpath/xpath_functions.aspXSLT 1.0如何使用Fn(功能命名空間)延長

使用來自Fn功能的命名空間功能,我只是告知系統正在使用MSXML XSLT處理器從現在開始。我所有的樣式表都是用2.0編寫的...所以現在我是堆棧,沒有任何工作,也不知道如何從fn命名空間使用函數。

我想知道是否可以以某種方式擴展XSLT 1.0,因爲我使用了很多這些函數。或者我現在做什麼?我絕對失去了和沮喪。

真的很感激任何幫助!

非常感謝!

+0

像MSXML這樣的XSLT 1.0處理器支持XPath 1.0中定義的函數http://www.w3.org/TR/xpath/#corelib和XSLT 1.0 http://www.w3.org/TR/xslt#附加FUNC。如果您將其與w3schools發佈的內容進行比較,那麼您會發現XPath 1.0中可用的功能是XPath 2.0中定義的功能的子集。所以你可以使用你在w3schools上用MSXML找到的一些函數,當然只有那些已經在XPath 1.0中定義的函數,而不是那些在XPath 2.0中新定義的函數。 基本上,如果你想使用XSLT 1.0處理器,那麼使用w3schools作爲參考不是一個好主意。 – 2010-02-22 15:35:49

回答

3

如果您遇到MSXML作爲您的處理器,我認爲您唯一的選擇是在Obalix的答案中選擇2,但您可能必須自己編寫擴展函數。

下面是如何執行大寫字母功能的示例。這使用XSLT中的JavaScript來執行該功能。

<?xml version='1.0'?> 
<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
     xmlns:user="http://mycompany.com/mynamespace"> 

<msxsl:script language="javascript" implements-prefix="user"> 
    function uppercase(textToConvert) 
    { 
     return textToConvert.toUpperCase(); 
    } 
</msxsl:script> 

<xsl:template match="text()"> 
    <xsl:value-of select="user:uppercase(string(.))"/> 
</xsl:template> 

</xsl:stylesheet> 

你可以做什麼,是把所有的腳本功能,在自己的XSLT表,並將其包含在所有自己的XSLT樣式表。

這個結果有多複雜取決於你使用了多少XPath2.0函數。

+0

@Tim C非常感謝。我注意到你聲明瞭msxsl命名空間(xmlns:msxsl =「urn:schemas-microsoft-com:xslt」)。我在想,如果你知道一個在MSXML中進行一般閱讀的好地方,那麼我可以理解它並找出我可以使用的東西......我真的很感激它!謝謝! – DashaLuna 2010-02-22 16:09:20

+0

我不知道它有多好,但你可以在MSDN上試試這個鏈接 - http://msdn.microsoft.com/en-us/library/ms759204(VS.85).aspx – 2010-02-23 12:57:23

2

嗯,恕我直言,你有點卡住了。 MSXML,沒有實現XSLT 2.0和XPath 2.0。所以基本上你有三個選擇:

  1. 試圖說服你supperiors,他們應該提供支持像Saxon.NET的另一個XSLT處理器。
  2. 使用microsoft的msxsl:腳本函數重新實現所需的所有功能。這應該證明是困難的,並且讓你依賴於Microsoft解析器。此外,它只轉換XPath函數 - 這裏不考慮XSLT 2.0的功能。
  3. 使用XSLT 1.0重新實現您的樣式表。

就我個人而言,我猜想ony選項1和3是可行的。

+0

@Obalix謝謝。不幸的是,他們不會改變處理器。我只是想知道我是否可以做任何事情,這樣我就可以使用來自http://www.w3schools.com/Xpath/xpath_functions.asp的函數了?以某種方式擴展MSXML?標誌。我認爲我是一個大挑戰。 – DashaLuna 2010-02-22 13:57:35

+0

那麼你可以看一下http://www.exslt.org/,看看是否有什麼東西可以使用,但是,除非MS決定將XSLT 2.0併入處理器,否則你會一個人待着。但是,不要大驚小怪,我剛剛陷入了同樣的陷阱。 – AxelEckenberger 2010-02-22 14:04:48