2012-01-22 2 views
2

Я использую Saxon 9 HE и в NetBeans 7.0.1, я получаю следующее сообщение об ошибке при попытке отправить параметр в моей таблице стилей:Как передать параметр в таблицу стилей xslt с помощью Saxon под Java?

enter image description here

Просто, чтобы убедиться, что хороший способ, чтобы послать параметр так Я могу вернуть его с помощью

<xsl:param ... />?

Если да, то как я могу его использовать?

Спасибо!

ответ

1

Из сообщения, кажется, совершенно очевидно, что вам нужно пройти net.sf.saxon.s9api.Qname в качестве первого аргумента (не только строки "myVar").

И второй аргумент должен быть сконструирован как net.sf.saxon.s9api.XdmValue.

Просто чтобы убедиться, что хороший способ, чтобы послать параметр, так что я могу получить его обратно с

<xsl:param ... />?

В вашем XSLT таблицах стилей (основные один и любой модуль таблицы стилей, на который ссылается в директиве xsl:import или xsl:include), вы должны иметь глобальный (ребенок xsl:stylesheet) xsl:param с тем же именем, что и строки, используемых для построения Qname, который вы передаете как первый аргумент setParameter().

Когда метод setParameter() выполняется, а затем преобразование вызывается, то соответствующий глобальный xsl:param будет иметь значение, которое было использовано для построения XdmValue передается в качестве второго аргумента setParameter().

+0

Спасибо. Но я считаю, что это слишком сложно или не очень связано с тем, что я пытаюсь сделать. Это действительно способ отправить параметр в «Таблицу стилей XSLT»? – Cybrix

+0

Я не уверен, почему вы ожидаете менее «сложного» способа указать и передать внешние параметры. Имя параметра может быть любым QName (имя и пространство имен-uri), а значение параметра может быть любого типа XDM. Метод API для указания этих данных не может быть «более простым», чем обеспечивает один Saxon. Вы уверены, что знаете, что хотите? Если он отличается от метода 'setParameter()', тогда вам нужно отредактировать вопрос и подробно описать, что вы хотите сделать. Существует более простой способ передачи только строковых значений, и это делается в командной строке, вызывающей Saxon. –

2

S9APIExamples.java См:

String[] fruit = {"apple", "banana", "cherry"}; 
QName paramName = new QName("in"); 
for (String s: fruit) { 
    StringWriter sw = new StringWriter(); 
    out.setOutputWriter(sw); 
    t.setParameter(paramName, new XdmAtomicValue(s)); 
    t.setDestination(out); 
    t.transform(); 
    System.out.println(s + ": " + sw.toString()); 
} 
+0

Очистить, по-прежнему полезно. Благодарю. – Cheeso