4
我使用XMLSpy的使用以下XSLT:XSLT較低的情況下,使用.NET
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output method="xml" version="1.0" encoding="UTF-16" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{lower-case(local-name())}">
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="* | text()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{lower-case(local-name())}"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>
</xsl:stylesheet>
如果我嘗試使用它在我的源代碼(XslCompiledTransform)我得到一個異常告訴我「的功能較低case()'不是XSLT合成器的一部分。
所以我改變了改造一點點:
fn:lower-case
現在我的例外是,腳本或「http://www.w3.org/2005/xpath-functions」前綴可以外部對象不被發現。 這裏有什麼問題?我該如何解決它?
問候
你可以發佈你與轉化的代碼?你是否正在創建一個NameTable並用正確的命名空間填充它? – Oded 2010-11-08 15:18:54
@Jaster:這是一個XSLT 2.0樣式表。我認爲XMLSpy使用Altova XSLT 2.0處理器,這很好。但是,你提到XslCompiledTrandform ...你是否在「純」.NET中運行這種轉換?這有一個XSLT 1.0處理器。 – 2010-11-08 15:34:44
好問題,+1。請參閱我的答案以獲得解釋和完整的XSLT1.0/XPath1.0解決方案。 :) – 2010-11-08 15:35:33