Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > Добавление нулей в начало числа


Автор: davidoffpk 12.5.2010, 14:08
Добрый день. 

В базе данных Oracle 10g есть xml файлы. Писать на PL\SQL скрипты для их обработки не хочется по той причине, что уже есть готовые xslt схемы. Решил воспользоваться встроенным процессором. Но есть проблема - процессор отказывается воспринимать функцию number() в сортировке, а мне нужно отсортировать некоторые числа. 

Подскажите, какой оптимальный способ с помощью xslt добавить нули в начало числа до 10 символов? Или может есть еще какой-нибудь способ это обойти?

Числа, например, такие:

Код

<A>2</A>
<A>-35</A>
<A>31</A>
<A>2000000</A>
<A>-35000</A>
 

Автор: diadiavova 12.5.2010, 15:28
А при чём тут функция number()? Просто укажи type="number" (без скобок) и всё. smile 

Автор: davidoffpk 12.5.2010, 15:45
М-м... я наверное неправильно изложил задачу или не понял ответ) 

Xml файлы(целиком) у меня хранятся в полях одной таблицы в типе BLOB. Так было нужно по заданию. В другой таблице хранятся xsl схемы также в типе BLOB. У меня есть функция, которая связывает файл со схемой и выполняет преобразование.

Так вот в одной из схем у меня есть стандартная запись:
Код

<xsl:sort order="descending" select="number(A)"/>
 

И все бы хорошо, если бы не вышеуказанная проблема...

Добавлено @ 15:48
Или Вы имели ввиду конструкцию:
Код

<xsl:sort order="descending" select="A" data-type="number"/>

Надо проверить...

Автор: diadiavova 12.5.2010, 16:09
Цитата(davidoffpk @  12.5.2010,  16:45 Найти цитируемый пост)
data-type="number"

 smile С названием слегка пропёрся smile

Автор: davidoffpk 12.5.2010, 16:20
 smile  Огромное спасибо!!! Я такой конструкцией не пользовался и вообще не знал, что она есть. Я, блин, над этой проблемой весь день в унынии зависал, думал что все переделывать придется) Спасибо!!!

Автор: Zloxa 12.5.2010, 16:30
Код

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 
Connected as common
 
SQL> 
SQL> select
  2  XMLTransform(
  3  xmlType('<r>
  4  <A>2</A>
  5  <A>-35</A>
  6  <A>31</A>
  7  <A>2000000</A>
  8  <A>-35000</A>
  9  </r>')
 10  ,xmlType('<?xml version="1.0" encoding="utf-8"?>
 11  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 12  <xsl:template match="r">
 13  <xsl:for-each select="A">
 14    <xsl:sort select="." data-type = "number"/>
 15      <A><xsl:value-of select="."/></A>
 16    </xsl:for-each>
 17  </xsl:template>
 18  </xsl:stylesheet>'
 19  )).GetStringVal() result
 20  from dual;
 
RESULT
--------------------------------------------------------------------------------
<A>-35000</A><A>-35</A><A>2</A><A>31</A><A>2000000</A>
 


Добавлено @ 16:35
кстати select = "number()" тоже работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)