Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбиение атрибута на несколько других атрибутов. 
:(
    Опции темы
GlooMMy
Дата 22.6.2010, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 10.3.2010

Репутация: нет
Всего: нет



исходный файл xml:
Код

<predmet fullname="Aa" shortname="a" />
<predmet fullname="Bb" shortname="b" />
...
<predmet fullname="Nnnn" shortname="n" />

Результирующий:
Код

<subject id="1" CODE="100001" />
<subject id="2" CODE="100002" />
...
<subject id="n" CODE="10000n" />

<!--  как добавить id я уже вкурсе
CODE="100001" соответствует первому fullname 
n - число -->



<translation basename="subject" CODE="100001.fullname" value="Aa" />
<translation basename="subject" CODE="100001.shortname" value="a" />

<translation basename="subject" CODE="100002.fullname" value="Bb" />
<translation basename="subject" CODE="100002.shortname" value="b" />
...
<translation basename="subject" CODE="10000n.fullname" value="Nnnn" />
<translation basename="subject" CODE="10000n.shortname" value="n" />


<!--
basename добавляю:
<xsl:copy>
    <xsl:attribute name="BASENAME">SUBJECT</xsl:attribute>
</xsl:copy>
-->

Вообщем нужно чтобы получилось из predment: subject и два translation. Как такое сделать?
Я так предполагаю, что нужно пройтись два раза по исходному файлу и сначала создать файл с subject, а за второй проход файл с translation. Но в этом случаи не собьется ли чего нибудь...
Если что-то не понятно расписал, то спрашивайтеsmile

PM MAIL   Вверх
magelan
Дата 22.6.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 7
Всего: 16



Пример с 2мя обработками.
1й - не работает, т.к. у него priority="-1", сотрешь минус будет выход как у тебя, 2й пример - с генерацией случайного идентификатора на пространстве документа, типа "как правильно".

Да, атрибутов может быть сколько угодно, хоть два хоть восемь...

Код

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml"/>

    <xsl:template match="/" priority="-1">

        <xsl:variable name="list" select="//predmet" />

        <xsl:for-each select="$list">
            <subject id="{position()}" CODE="{100000 + position()}" />
        </xsl:for-each>

        <xsl:for-each select="$list">
            <xsl:variable name="pos" select="position()" />
            <xsl:for-each select="@*">
                <translation basename="subject" CODE="{100000 + $pos}.{name()}" value="{.}" />
            </xsl:for-each>
        </xsl:for-each>

    </xsl:template>

    <xsl:template match="/">
        <xsl:variable name="list" select="//predmet" />

        <xsl:for-each select="$list">
            <subject id="{position()}" CODE="{generate-id(.)}" />
        </xsl:for-each>

        <xsl:for-each select="$list">
            <xsl:variable name="id" select="generate-id(.)" />
            <xsl:for-each select="@*">
                <translation basename="subject" CODE="{$id}.{name()}" value="{.}" />
            </xsl:for-each>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

PM MAIL   Вверх
GlooMMy
Дата 23.6.2010, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 10.3.2010

Репутация: нет
Всего: нет



Спасибо! Замечательно работаетsmile
Элемент верхнего уровня удаляется из файла, что добавить нужно?
PM MAIL   Вверх
magelan
Дата 23.6.2010, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 7
Всего: 16



После открытия темплейта пишешь
<my-root>

перед закрытием
</my-root>


 smile 

ну если совсем честно
Код

<xsl:template match="/" priority="-1">
   <xsl:copy>
....

   </xsl:copy>
</xsl:template>


Это сообщение отредактировал(а) magelan - 23.6.2010, 13:26
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.1989 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.