Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите решить проблему вывода данных / 8 сообщений из 8, страница 1 из 1
01.03.2007, 13:40
    #34363503
statusden
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить проблему вывода данных
Проблема заключается в следующем:
необходимо сформировать WordML документ, в котором будет выведена таблица.
Исходные данные: xml-файл с данными (выборка из БД). К нему применяется xslt-шаблон.
XML сфоримирован следующим образом, что структура дерева формируются из COM-объектов, которые связаны по какому-либо из праметров (например ID)...
Для формирования таблицы нужно пробежаться по двум объектам, условно назовем их RootObject и ChildObject(элементы). (RootObject/ChildObject). В RootObject "данные о предпринимателях" - имеется аттрибут ID, а в ChildObject "лицензии предпринимателей (может быть несколько)" - аттрибут OfferID. Т.е. в ChildObject имеется также ID, название лицензии и OfferId предпренимателя (т .е. поле ID в RootObject).
Вот таблица должна быть сформирована след. образом:
привелу пример строки таблицы:
1-ый столбец: № п/п
2-ый столбец: Наименование лицензии
3-ый столбец: Все предпрениматели имеющие данную лицензию (лучше коенчно организовать в виде ненумерованного списка)

Проблема заключается в том, что ChildObject присутствует избыточность, названия лицензии одинаковые, а разные ссылки (OfferId) на предпринимателей. Вот нужно как то избавиться от этой избыточности, чтобы не выводить одинакове названия лицензии.
...
Рейтинг: 0 / 0
01.03.2007, 13:51
    #34363560
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить проблему вывода данных
Нууу, когда будешь выводить данные напиши проверку, на совпадение уже введеных значений с текущим, в зависимости от результата либо вводи либо преходи к следующему
...
Рейтинг: 0 / 0
01.03.2007, 14:09
    #34363643
statusden
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить проблему вывода данных
А что значит "уже введеных значений " ? надо ведь как то организовать тогда хранение. Всего существует 10 видов этих лицензий, конечно можно записать их все в переменные, но это будет тупо сделано!
...
Рейтинг: 0 / 0
01.03.2007, 14:37
    #34363766
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить проблему вывода данных
Тогда я че то вопроса не понял,
сначала ты говоришь что тебе надо избавиться от избыточности и повторений, теперь ты говоришь что записей (лицензий) всего 10 штук.
А про это "что значит "уже введеных значений " ?" -имелось ввиду то что к примеру у тебя есть xml документ где есть все (даже те какие не надо) записи, ты хочешь от них избавиться, вот и парсишь свой xml файл xsl'ским. А внутри xsl написано:
К примеру - поэтому по русски :)
Если Текущая запись равна предыдущей то ниче не делаем, иначе копируем ее в выходной документ
...
Рейтинг: 0 / 0
02.03.2007, 11:23
    #34366034
statusden
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить проблему вывода данных
Ну да, всего 10 штук.. в смысле разновидностей лизенции. Может быть к примеру 20 предпринимателей и каждый иметь все 10 лизенции. И в xml тогда выгружается 200 записей. (это в ChildObject).
Т.е. ты предлагаешь сначала отсортировать данные , чтобы одинаковые лицензии располагались рядом, и потом сравнивать две соседние записи..?
...
Рейтинг: 0 / 0
02.03.2007, 12:44
    #34366385
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить проблему вывода данных
Ну.... почти.
К примеру мы имеем xml документ, где допустим текст в <number> - это номера лицензий
<root>
<number>AS</number>
<number>AC</number>
<number>AB</number>
<number>AS</number>
<number>AK</number>
<number>At</number>
</root>
Примерно вот так выглядит сравнение значений в xsl
<xsl:template match="//number">
<xsl:choose>
<xsl:when test="count(//number[text()=current()/text()])=1">
<xsl:copy-of select="current()"/>
</xsl:when>
<xsl:otherwise> Сдесь надо подумать как вывести те что повторилиь, при этом токо один раз</xsl:otherwise>
</xsl:choose>
В результате этого примера ты получишь только уникальные номера лицензий , еще надо скопировать повторяющиеся только один раз, как .. пока не придумал (если често .. ломает :) )
Результат:
<number>AC</number>
<number>AB</number>
<number>AK</number>
<number>At</number>
...
Рейтинг: 0 / 0
02.03.2007, 17:28
    #34367740
statusden
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить проблему вывода данных
Ага... пасибо..! мысль понял.. помогло!
<xsl:when test="count(//number[text()=current()/text()])=1">
Только сравнивал не текстовое значение, а атрибуты элемента.
И пришлось добавить условие для вывода первой записи.
...
Рейтинг: 0 / 0
02.03.2007, 17:50
    #34367849
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить проблему вывода данных
Блин сказалбы сразу что у тебя атрибуты, а то я как раз из выражения на сравнения атрибутов и переделывал на значения текста тегов :)
Удачи
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Помогите решить проблему вывода данных / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]