2012-09-24 1 views
2

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

<Products> 
    <Product> 
     <Productname>Product 1</Productname> 
     <Price>90.45</Price> 
    </Product> 
    <Product> 
     <Productname>Product 2</Productname> 
     <Price>30,25</Price> 
    </Product> 
</Products> 

У меня есть XSLT, который делает счет всех продуктов в формате XML в формате PDF. Пока нет проблем. Вот моя проблема: я хотел бы иметь сумму продуктов на каждой странице. Поэтому, если продукт с 1 по 5 находится на странице 1, я хотел бы получить сумму цен на эти продукты. Если продукт с 6 по 10 представлен на стр. 2, я хотел бы получить сумму продуктов от 1 до 10. Если продукт с 7 по 15 на странице 3, то я хотел бы получить сумму продуктов с 1 по 15 и так далее ,

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

+0

Это похоже на то, что можно было бы решить, используя 'fo: marker' и' fo: retrieve-marker'. Вот пример: http://markmail.org/message/t6hl5mo6eo5mppj4. – mzjn

+0

@mzjn: Похоже, это стоит того. Тогда этот вопрос не должен оставаться в «неотвеченном» списке. – LarsH

+0

@LarsH: ответ опубликован! – mzjn

ответ

0

Я не могу сказать вам точно, как писать таблицу стилей, но это выглядит как проблема, которая может быть решена с помощью fo:marker и fo:retrieve-marker (или, возможно, fo:retrieve-table-marker).

Маркер - это обозначенный фрагмент текста или вычисленное значение из исходного документа, который «извлекается» для отображения в областях статического содержимого или заголовках/нижних колонтитулах таблицы на выходе. Маркеры часто используются для запуска заголовков страниц, но они также могут использоваться для отображения промежуточных итогов накопленного количества. См. http://www.w3.org/TR/xsl11/#fo_marker.

Вот полный пример: http://markmail.org/message/t6hl5mo6eo5mppj4. Надеюсь, вы сможете приспособить его к вашим потребностям.