2017-02-17 6 views
0

Привет У меня есть стили, что принимает параметр от ant xslt task. Но параметр полон управляющие последовательностями, такие как <tag-name> и т.д ... Вот сырьевое представление параметра $fileset-xml: link, который является прямым выходом из этого:XSLT принимает escape-последовательности как параметр

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:saxon="http://saxon.sf.net/" version="1.0"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:param name="fileset-xml"/> 
    <!-- --> 
    <!-- --> 
    <xsl:template match="/theRoot"> 
     <root> 
      <xsl:value-of select="$fileset-xml"/> 
     </root> 
    </xsl:template> 
    <!-- --> 
    <!-- --> 
</xsl:stylesheet> 

Моего намерение состоит в том, чтобы произвести вывод в xml, из этого параметра, но функция saxon:parse($fileset-xml) не любит аргумент в этом формате. Я предполагаю, что если мы заменим escape-символы на их отображаемые значения, я получу допустимый XML-файл, но как это сделать?

Процессор saxonb9-1-0-8j

EDITION_1

Как apendx на комментарий @MartinHonnen:

Процессор:

<classpath location="../../infrastructure/SaxonEE9-7-0-11J/saxon9ee.jar:/net.sf.saxon.TransformerFactoryImpl"/>

XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:param name="fileset-xml"/> 
    <xsl:variable name="file-set-xml" select="parse-xml(parse-xml-fragment('&lt;a/&gt;'))"/> 
    <!-- --> 
    <!-- --> 
    <xsl:template match="/theRoot"> 
     <root> 
      <xsl:copy-of select="$file-set-xml"/> 
     </root> 
    </xsl:template> 
    <!-- --> 
    <!-- --> 
</xsl:stylesheet> 

И ошибка:

[xslt] : Fatal Error! Error checking type of the expression 'funcall(parse- xml-fragment, [literal-expr(<a/>)])'. Cause: Error checking type of the expressi on 'funcall(parse-xml-fragment, [literal-expr(<a/>)])'.

+0

Итак, какое сообщение об ошибке вы получите с помощью 'saxon: parse ($ fileset-xml)'? –

+0

Это сообщение об ошибке не приходит из Saxon. С предыдущим вопросом, сообщающим очень похожее сообщение об ошибке здесь: http://stackoverflow.com/questions/15812382/getting-compile-error-while-using-format-date-method-in-xslt выяснилось, что проблема заключалась в том, что пользователь фактически запускал Xalan. –

ответ

1

Если вы передаете строку в виде &lt;a/&gt; (10 символов), то функция XPath parse-xml-fragment() превратит это в строку <a/> (4-х символов) , и если вы примените parse-xml() (или parse-xml-fragment()) к этой 4-символьной строке, вы получите дерево узлов, содержащее пустой элемент с именем «a».

Так что вам нужно разобрать данные дважды.

+0

Не могли бы вы привести пример. – Hairi

+0

Kau Вы имеете в виду применение в качестве аргумента? Потому что, когда я применяю его в качестве аргумента, я получаю сообщение об ошибке. – Hairi

+0

@Hairi, можете ли вы переключиться на Saxon 9.7 и 'version =" 3.0 "'? Затем нужно выполнить 'parse-xml (parse-xml-fragment ($ fileset-xml))'. Я не помню, имеет ли Saxon B 9.1 функцию расширения для синтаксического анализа строки фрагмента, и вам нужно это для первого этапа синтаксического анализа) –

Смежные вопросы