2011-01-27 75 views
1

事實證明,在處理XSLT時,webkit在處理空白時表現得不是很好。它似乎對待換行符,回車符,製表符和空格,甚至到substring-after('test string','
')將返回string點。有什麼辦法讓webkit的javascript正確處理空白處?

有什麼辦法讓它正常運行,或者這是一個沒有解決方法的webkit中的錯誤?

編輯:下面是一些JavaScript代碼演示了錯誤:

var parser = new DOMParser(); 
var xsltText = "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"version=\"1.0\"><xsl:template match=\"test\"><output><xsl:value-of select=\"string-length(substring-after(., '&#10;'))\"/></output></xsl:template></xsl:stylesheet>"; 
var xslt = parser.parseFromString(xsltText, "text/xml"); 
var xmlText = "<test>test string</test>"; 
var xml = parser.parseFromString(xmlText, "text/xml"); 
var xsltProcessor = new XSLTProcessor(); 
xsltProcessor.importStylesheet(xslt); 
var processed = xsltProcessor.transformToDocument(xml); 
var result = processed.firstChild.textContent; 

result變量應該明顯含有 '0';在Safari 4和Chrome 8中,它返回'6'。

+0

這是在https://bugs.webkit.org/show_bug.cgi?id=53375上報告爲WebKit錯誤,並且錯誤報告引用了此StackOverflow問題。 – 2012-07-17 00:58:25

回答

0

我不能用Safari 5.0.3重現這個問題。 測試用例(加載在瀏覽器窗口中的XML文檔):

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="test2011012801Xsl.xml"?> 
<test>foo bar</test> 

在樣式表

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:template match="/"> 
    <html> 
     <head> 
     <title>Test</title> 
     </head> 
     <body> 
     <xsl:apply-templates/> 
     </body> 
    </html> 
    </xsl:template> 

    <xsl:template match="test"> 
    <p><xsl:value-of select="string-length(substring-after(., '&#10;'))"/></p> 
    </xsl:template> 

</xsl:stylesheet> 

輸出兩個火狐(3.6)和Windows上的Safari爲 「0」。因此,至少在測試中沒有證據表明文本節點中的空格字符被視爲換行符。

+0

我第一次在Chrome中注意到這一點......當然,我測試的Safari版本只有4.0.2,可能5.0.3使用我猜測的更新版本的webkit。 – Flynn1179 2011-01-28 13:43:47

相關問題