xslt转换删除CDATA

时间:2016-02-11 14:46:49

标签: xml xslt libxslt

您好我正在使用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 "&#160;">
]>

<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。

1 个答案:

答案 0 :(得分:1)

  

我正在使用lib xsltproc

但是你的样式表显然是为微处理器编写的。 msxsl:script对libxslt处理器没有意义,因此:

<xsl:value-of select="user:testFunc('')"/>

指未定义的函数(正如您的错误消息清楚地说明的那样)。