Вычисления в XML документах
из инета не видно
В инет кто-нибудь выложите пожалуйста !
Выкладывать в Интернет я пока не хочу, и просьба ко всем не делать этого. Если нужно могу прислать вам по почте, пишите в приват.
up
Задумка интересная. Только вот целесообразность под вопросом, как мне кажется. У тебя та же самая Excel-таблица в XML-представлении, ты ее считаешь и перегоняешь в другой XML, который опять же по сути есть представление какой-то Excel-таблицы.
Это XSLT шаблон или прога?
Вообще, сейчас многие организации хотят уйти от cбора отчетности в Excel, некоторые пробуют перейти на XML, но тут иногда возникают вопросы.
Если я правильно тебя понял, и ты не путаешь Excel c XSL.
Обработчик XML документов это XSLT+ прога, использующая динамически сгенерированную XSLT-стил. таблицу.
на чем написана, где работает. А не смотреть пол-статьи
на примеры XML-документа.
Я могу показать эту прогу. Если не считать инициализацию переменных, то это цикл из 10 строчек. Написана на Delphi, просто тогда шла на нем разработка (можно переписать на чем угодно). Да и еще не большая XSLT.
А вообще, я хотел услышать мненме о самом способе.
Там всего два примера. Ты считаешь второй пример лишним? По-моему, он демонстрирует приемущества.
А откуда берутся постоянные "../../"? И что они в данном случае означают?
там написано, что текущий контекст - это местоположение самого выражения, а ../../ это выход на родителей
Такой инструмент вообще для задач несколько иного рода предназначается. Это как яблоки с апельсинами сравнивать. С трудом представляю себе человека, переходящего с Excel на какие-то XML файлы Ах да, заодно надо научить его писать на XSLT.
Тут фишка в чем? В автоматическом разрешении зависимостей между формулами. На этом и надо заострять внимание, ИМХО. Все остальное в XPath есть, тем более если его расширить всякими агрегатными функциями.
Что за вложенные таблицы? (извиняюсь за свое незнание) В поиске такого термина нет. В Access есть, но они тут не причем.
ps
но в обоих примерах, ИМХО, они очень неестественно смотрятся.
Если ты имел ввиду "Создание структуры" в Excel, то это не совсем то.
Эээ... может быть, я имел в виду тоже, что и ты под словом "сводные"... В английской версии есть какие-то Subtotals - никогда не пользовался, правда. А есть еще PivotTable, но это для весьма продвинутых пользователей - там уже можно вроде бы многомерные таблицы наворачивать, опять же сам никогда не пользовался.
PivotTable - это уже нечистые эелектронные таблицы (точнее вообще не электронные таблицы). Это скорее клиентский компонет для OLAP. Причем достаточно ограничен по возможностям. По-моему, предложенный способ более мощный из-за возможностей XPath. Хотя конечно же, этот способ не противопоставляется клиентам OLAP, он скорее позицианируется для сбора отчетности.
<item a1="{sum(../*/@*[name=name(current])}">
<item a1="7" a2="9"/>
</item>
Можно сделать соответствующую опцию в обработчике. Можно так же разделить текущий контекст для текстовых узлов и для значений атрибутов.
up.
Также очень удобно применять xsl не к xml-у, а к реальной программе. Т.е. программа реализует IXPathNavigator на основе своих данных (объекты, свойства далее применяем к IXPathNavigator-у xsl-преобразование, на выходе получаем обработанные данные, которые опять можно превратить в реальные объекты.
не к xml-у
?
Ты имел ввиду XSLT, используемые в моем подходе?
P.S. Выражайся точнее, интерфейсы реализуют классы, а не программы, т.е. не очень понятно слово “объекты” в скобочках.
Так вот можно как раз сделать, чтобы XPathNavigator бегал не по xml-хранилищу, а по реальным объектам.
Допустим у нас такие классы в программе:
class Data
{
public Customer[] Customer {get;}
}
class Customer
{
public Order[] Orders {get;}
public string Name {get;}
}
class Order
{
public double Price {get;}
public DateTime Time {get;}
}
тогда мы можешь реализовать IXPathNavigator, который будет бегать по этим объектам, и эмулировать следующий xml-представление:
<Data>
<Customer name="qq">
<Order Time="20.11.03" Price="100" ></Order>
<Order Time="23.11.03" Price="150" ></Order>
<Customer>
<Customer name="qq2">
<Order Time="20.11.03" Price="100" ></Order>
<Order Time="23.11.03" Price="150" ></Order>
<Customer>
</Data>
Далее к этому IXPathNavigator-у легко можно применить твое xslt-преобразование.
> Выражайся точнее
Дык, более разжеванная идея - требует больше времени.
>public string Name {get;}
в классе Customer, да?
да. извини, ошибся. Исправил.
это реально используется?
ps
Но кто-то как раз на днях говорил, что у них в проге (что-то из разряда склад-учет) реализован в том числе доступ через IXPathNavigator.
А пока не подумал , вот такой вопрос: в чем приемущество XSLT здесь? зачем его здесь использовать?
ps.
Если сделать свой не только IXPathNavigator, но и IXmlWriter - то можно использовать xsl и для преобразования объектов. Особенно может это пригодится в задачах со сложной структурой данных, и при этом где нет особых затыков по производительности.
Оставить комментарий
mezenat
Я придумал интересный способ выполнения вычислений в XML документах и написал по этому поводу . Предполагается, что читатель знаком с XPath и XSLT. Может быть, этот способ будет полезен для решения ваших задач. Этот способ успешно функционирует в одном крупном предприятии. Мне хотелось бы услышать ваши комментарии.