xslt 转换删除 CDATA
xslt transformation removes CDATA
您好,我正在使用 lib xsltproc 转换当前项目中的一组旧 xml、xls 文件。尝试使用该工具转换我的项目时出现以下错误:
Warning: xmlXPathCompOpEval: function testFunc not found
XPath error : Unregistered function
runtime error: file test.xsl line 25 element value-of
XPath evaluation returned no result.
我搜索了文件导入,发现在 CDATA 标签中有一个包含此函数的导入。导入的文件如下所示:
<!-- importMe.xsl -->
<?xml version="1.0"?>
<!DOCTYPE xsl:stylesheet >
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://www.test.se/test">
<msxsl:script language="JavaScript" implements-prefix="user">
<![CDATA[
function testFunc(str){
return str;
}
]]>
</msxsl:script>
</xsl:stylesheet>
导入该文件的文件如下所示:
<!-- testImport.xsl -->
<?xml version="1.0"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp " ">
]>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://www.test.se/test">
<xsl:import href="importMe.xsl"/>
<xsl:output method="html" encoding="utf-8"/>
<msxsl:script language="JavaScript" implements-prefix="user">
function someFunc(value) {
return "";
}
</msxsl:script>
<xsl:template match="/">
<xsl:value-of select="user:testFunc('')"/>
<HTML>
<HEAD>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
为了简洁起见,我没有包括 xml 文件,因为它似乎不是问题的一部分。
似乎发生的是 CDATA 没有在转换中被删除。我尝试重命名 importMe.xsl 文件,然后收到一条不同的错误消息,抱怨文件丢失,所以我很确定它已导入。
有什么方法可以防止CDATA消失吗?
我已尝试以各种组合将以下行添加到两个文件中
<xsl:output method="html" encoding="utf-8" cdata-section-elements="msxsl:script"/>
同时使用 method="html"
和 "xml"
以及不同的 cdata-section-elements。
I'm using lib xsltproc
但是您的样式表显然是为 Microsoft 处理器编写的。 msxsl:script
对 libxslt 处理器没有意义,因此:
<xsl:value-of select="user:testFunc('')"/>
指的是未定义的函数(正如您的错误消息明确指出的那样)。
您好,我正在使用 lib xsltproc 转换当前项目中的一组旧 xml、xls 文件。尝试使用该工具转换我的项目时出现以下错误:
Warning: xmlXPathCompOpEval: function testFunc not found
XPath error : Unregistered function
runtime error: file test.xsl line 25 element value-of
XPath evaluation returned no result.
我搜索了文件导入,发现在 CDATA 标签中有一个包含此函数的导入。导入的文件如下所示:
<!-- importMe.xsl -->
<?xml version="1.0"?>
<!DOCTYPE xsl:stylesheet >
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://www.test.se/test">
<msxsl:script language="JavaScript" implements-prefix="user">
<![CDATA[
function testFunc(str){
return str;
}
]]>
</msxsl:script>
</xsl:stylesheet>
导入该文件的文件如下所示:
<!-- testImport.xsl -->
<?xml version="1.0"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp " ">
]>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://www.test.se/test">
<xsl:import href="importMe.xsl"/>
<xsl:output method="html" encoding="utf-8"/>
<msxsl:script language="JavaScript" implements-prefix="user">
function someFunc(value) {
return "";
}
</msxsl:script>
<xsl:template match="/">
<xsl:value-of select="user:testFunc('')"/>
<HTML>
<HEAD>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
为了简洁起见,我没有包括 xml 文件,因为它似乎不是问题的一部分。
似乎发生的是 CDATA 没有在转换中被删除。我尝试重命名 importMe.xsl 文件,然后收到一条不同的错误消息,抱怨文件丢失,所以我很确定它已导入。
有什么方法可以防止CDATA消失吗?
我已尝试以各种组合将以下行添加到两个文件中
<xsl:output method="html" encoding="utf-8" cdata-section-elements="msxsl:script"/>
同时使用 method="html"
和 "xml"
以及不同的 cdata-section-elements。
I'm using lib xsltproc
但是您的样式表显然是为 Microsoft 处理器编写的。 msxsl:script
对 libxslt 处理器没有意义,因此:
<xsl:value-of select="user:testFunc('')"/>
指的是未定义的函数(正如您的错误消息明确指出的那样)。