Объедините несколько xslt таблиц стилей

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

7
задан roo 16 September 2008 в 08:05
поделиться

5 ответов

Можно использовать таблицу стилей XSL для слияния таблиц стилей. Однако это эквивалентно использованию xsl:include элемента, не xsl:import (как Azat Razetdinov уже указал). Можно читать на различии здесь.

Поэтому необходимо сначала заменить xsl:import xsl:include, разрешить любые конфликты и протестировать, получаете ли Вы все еще корректные результаты. После этого Вы могли использовать следующую таблицу стилей для слияния существующих таблиц стилей в одну. Просто примените его к своей основной таблице стилей:

<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                version="1.0">

<xsl:template match="xsl:include">
  <xsl:copy-of select="document(@href)/xsl:stylesheet/*"/>
</xsl:template>

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Первый шаблон заменяет весь xsl:include включенными таблицами стилей при помощи функции документа, которая читает в файле, на который ссылаются в атрибуте href. Второй шаблон является преобразованием идентификационных данных.

Я протестировал его с Xalan, и это, кажется, хорошо работает.

16
ответ дан 6 December 2019 в 10:55
поделиться

Невозможно включать импортированный stylsheets в основной файл, не повреждая приоритет импорта. Например, Вы определяете переменную верхнего уровня в импортированной таблице стилей и переопределяете ее в основном файле. При слиянии двух файлов в один Вы получите две переменные с тем же именем и импортируете приоритет, который приведет к ошибке.

Обходное решение является двумя xsl:import замены с xsl:include, и разрешите любые конфликты. После этого Вы в безопасности заменить xsl:include инструкции содержанием соответствующих файлов, потому что, именно это делает XSLT-процессор:

Включение работает на уровне дерева XML. Ресурс, расположенный href значением атрибута, анализируется как XML-документ, и дети xsl:stylesheet элемента в этом документе заменяют xsl:include элемент во включении документа. То, что шаблонные правила или определения включены, не влияет на способ, которым они обрабатываются.

2
ответ дан 6 December 2019 в 10:55
поделиться

Ручное слияние, вероятно, будет наилучшим вариантом.

Основное соображение должно будет, вероятно, удостовериться, что логика для соответствия шаблонам работает в объединенной таблице стилей.

1
ответ дан 6 December 2019 в 10:55
поделиться

Почему Вы хотели бы? Они обычно разделяются по причине afterall (часто пригодность для обслуживания)

Вы могли всегда писать, что слияние сами - считало файлы XSL в, выбирает шаблонные объекты, которыми Вы интересуетесь и пишете в новый основной файл XSL...

0
ответ дан 6 December 2019 в 10:55
поделиться
 import multiple xsl in single xsl

      <xsl:import href="FpML_FXOption_Trade_Template1.xsl"/>
      <xsl:apply-imports/>

<calypso:keyword>
                <calypso:name>DisplayOptionStyle</calypso:name>
<calypso:value>Vanilla</calypso:value>
</calypso:keyword>

           <xsl:import href="FpML_FXOption_Trade_Template2.xsl"/>
           <xsl:apply-imports/>
-1
ответ дан 6 December 2019 в 10:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: