преобразование xslt удаляет 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 "&#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.


person Pablo Jomer    schedule 11.02.2016    source источник
comment
Я согласен, но я уже пробовал это решение, оно у меня не работает.   -  person Pablo Jomer    schedule 11.02.2016
comment
Я добавил следующую строку в оба файла без каких-либо результатов. ‹xsl:метод вывода=кодировка html=utf-8 cdata-section-elements=msxsl:script/›   -  person Pablo Jomer    schedule 11.02.2016


Ответы (1)


Я использую библиотеку xsltproc

Но ваша таблица стилей, очевидно, была написана для процессора Microsoft. msxsl:script не имеет смысла для процессора libxslt, поэтому:

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

относится к неопределенной функции (как ясно сказано в вашем сообщении об ошибке).

person michael.hor257k    schedule 11.02.2016
comment
Я подумал, что это может быть проблемой. Теперь я нашел msxsl.exe и собираюсь попробовать. Спасибо. - person Pablo Jomer; 11.02.2016
comment
@PabloKarlsson Я бы посоветовал вам задать другой вопрос: как добиться того, что мне нужно, не требуя расширения для MS? - person michael.hor257k; 11.02.2016