Отладка путем вывода полного XML переменной в xslt с использованием xml: message - PullRequest
2 голосов
/ 25 января 2010

У меня есть переменная с именем $statuses.

Я хочу вывести полный XML, а не только значения в узлах, поэтому я попытался сделать следующее: -

<xsl:message>Contents of the nodeset_statuses:-
    <xsl:copy-of select="$statuses"/>
</xsl:message>

Однако, это только выводит значения в узлах в XML, что не то, что я хочу. Я хочу XML "как есть". Я видел несколько примеров шаблонов prettyPrint, таких как dom4j, но, честно говоря, на самом деле не должно быть так много работы.

Есть ли доступный вызов метода Java?

Я пробовал что-то вроде:

<xsl:message>
    <xsl:variable name="output" select="java:System.out.println('print me something')"/>
</xsl:message>

С определением пространства имен XML:

xmlns:java="http://xml.apache.org/xslt/java"

Но это не сработало, так как вернуло ошибку:

System.out.println не является признанной частью расширений java / xslt apache.

Кто-нибудь знает, что на самом деле вызов Java для достижения того, что я хочу, или способ сделать это?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 08 апреля 2013

Ваш комментарий говорит о том, что вы используете Xalan, который имеет расширение для записи результатов в различные документы результатов . Добавить

xmlns:redirect="http://xml.apache.org/xalan/redirect"
extension-element-prefixes="redirect"

до <xsl:stylesheet> корневого элемента вашего преобразования, тогда вы можете использовать

<redirect:write select="'statuses_debug.xml'">
  <statuses>
    <xsl:copy-of select="$statuses"/>
  </statuses>
</redirect:write>

для выгрузки переменной в отдельный файл (я добавил один корневой элемент, чтобы сделать вывод правильно сформированным, если $statuses содержит более одного элемента).

0 голосов
/ 13 января 2012

Используйте функцию документа и набор узлов xsl:variable, чтобы прочитать значение:

<xsl:message>
  <xsl:value-of select="document('')/*/xsl:variable/@select[../@name='output']"/>
</xsl:message>
...