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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Размер строки, Слияние двух наборов цифр 
V
    Опции темы
Mozirina
  Дата 24.10.2011, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет всем!

Как написать XSLT преобразование, чтобы при слиянии двух наборов цифр общее количество было не более 13 символов? При этом первое, например 30000, второе меняющиеся значения (артикул) / Их первого можно и нужно удалят лишние нули, артикул оставляем в неизменном виде.

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


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Используй функции string-length, substring и concat
http://msdn.microsoft.com/ru-ru/library/ms...28VS.90%29.aspx


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Mozirina
Дата 24.10.2011, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(diadiavova @ 24.10.2011,  14:33)
Используй функции string-length, substring и concat
http://msdn.microsoft.com/ru-ru/library/ms...28VS.90%29.aspx

уже пыталась..не выходит....не понимаю как именно условие задать если так, то столько нулей, если так, то столько....
PM MAIL   Вверх
diadiavova
Дата 24.10.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



А что именно не выходит? smile Определяешь количество символов в артикуле, вычитаешь его из 13 и результат используешь в функции substring для указания количества символов первой строки, которое надо взять. Что-то типа
Код

concat(
    substring(
        $firstnumber,
        1,
        13 - string-length($articul)
        ), 
    $articul
    )

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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Mozirina
Дата 24.10.2011, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(diadiavova @ 24.10.2011,  14:46)
А что именно не выходит? smile Определяешь количество символов в артикуле, вычитаешь его из 13 и результат используешь в функции substring для указания количества символов первой строки, которое надо взять. Что-то типа
Код

concat(
    substring(
        $firstnumber,
        1,
        13 - string-length($articul)
        ), 
    $articul
    )

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

Спасибо, буду дальше пытаться....я еще новичок-с
PM MAIL   Вверх
magelan
Дата 24.10.2011, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


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

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



Я так понимаю, что там только XPath недостаточно. Нужна рекурсия.
Код

<?xml version="1.0" encoding="windows-1251"?>

<root>
    <item number="1234567890" /> 
    <item number="123456789" /> 
    <item number="12345678" /> 
    <item number="1234567" /> 
    <item number="123456" /> 
</root>

Код

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

<xsl:template match="/">
    <xsl:for-each select="/root/item">
        <xsl:variable name="art">
            <xsl:choose>
                <xsl:when test="string-length( @number ) &gt; 12">
                    <xsl:text>Error - </xsl:text>
                    <xsl:value-of select="@number" />
                </xsl:when>
                <xsl:otherwise>
                    <xsl:text>3</xsl:text>
                    <xsl:call-template name="dup0">
                        <xsl:with-param name="count" select="12 - string-length( @number )" />
                    </xsl:call-template>
                    <xsl:value-of select="@number" />
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:value-of select="$art" />
        <br />
    </xsl:for-each>
</xsl:template>
<xsl:template name="dup0">
    <xsl:param name="count" select="0" />
    
    <xsl:if test="$count &gt; 0">
        <xsl:text>0</xsl:text>
        <xsl:call-template name="dup0">
            <xsl:with-param name="count" select="$count - 1" />
        </xsl:call-template>
    </xsl:if>    
</xsl:template>
</xsl:stylesheet>


Хотя способ ДядиВовы - много изящнее...

Это сообщение отредактировал(а) magelan - 24.10.2011, 15:00
PM MAIL   Вверх
diadiavova
Дата 24.10.2011, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(magelan @  24.10.2011,  15:57 Найти цитируемый пост)
Я так понимаю, что там только XPath недостаточно. Нужна рекурсия.

Ну почему? Если заранее известно, что первое число соответствует определенному форумату, то есть у него в конце присутствуют нули, которые при необходимости можно удалить, то вполне достаточно. Вот если это условие проверять надо - тогда конечно, но в условии вроде как это не было описано.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Mozirina
Дата 24.10.2011, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



верно, нули у первых чисел изначально заданы, неизменны.... Нужны лишь для "дела", поскольку поле штрих-кода содержит 13 значений, а в артикуле из которого оно получается изначально меньше цифр, вот и решили добавлять некое число.. Надеюсь понятно изложила...Пошла изучать ваши советы!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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