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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XSL. приведение типов 
:(
    Опции темы
Compositum
Дата 3.4.2012, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Доброго времени суток.

элемент имеет тип xs:bool. Считываю значение и проверяю с помощью xs:if  - всегда получаю true, не зависимо от того, какое значение в элементе. Я так понял, что XSL не в состоянии определить тип объекта, несмотря на наличие XSD. Тогда вопрос такой: как преобразовать то, что содержится в элементе в логическое значение, чтобы можно было проверить его в конструкции xs:if ?

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


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


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

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



Цитата(Compositum @  3.4.2012,  18:20 Найти цитируемый пост)
как преобразовать то, что содержится в элементе в логическое значение, чтобы можно было проверить его в конструкции xs:if ?

Вообще-то преобразование производится автоматически, но при этом используется своя логика. Для явного преобразования можно использовать функцию boolean(), а если результат будет неверным, то видимо выражение придется записать иначе. Типы xsd не учитываются и преобразование о схеме ничего не знает.

Добавлено через 26 секунд
http://msdn.microsoft.com/ru-ru/library/ms...28VS.90%29.aspx


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


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



что-то не работает у меня boolean() так как надо... Всё время true возвращает...

Исходный XML-файл:
Код

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="./support/settings.xslt"?>
<doc:settings
  xmlns:doc="http://www.mea-orbis.com/2012/XMLSchema/settings"
  xmlns:lang="http://www.mea-orbis.com/2012/XMLSchema/localization"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.mea-orbis.com/2012/XMLSchema/settings ./support/settings.xsd">

  <!--Группа общих настроек отображения содержимого в окне браузера-->
  <lang:group nameId="display" descriptionId="displayDescription">
    <!--Путь к XML-файлу, содержимое которого следует применять к документам как CSS.-->
    <lang:string nameId="cssStyle" descriptionId="cssStyleDescription">./css/styles.xml</lang:string>
    <!--Следует ли в таблицах отображать колонку с номером строки-->
    <lang:bool nameId="showPositionColumn" descriptionId="showPositDescription">false</lang:bool>
    <!--Следует ли в таблице отображать колонку с именем идентификатора-->
    <lang:bool nameId="showIdentifierColumn" descriptionId="showIdentifDescription">false</lang:bool>
    <!--Локализация интерфейса и документации-->
    <lang:localization nameId="lang" descriptionId="langDescription">ru-RU</lang:localization>
  </lang:group>

</doc:settings>


Как видим, имеется два логических значения...  Однако такая стока кода:
Код

<xsl:if test="boolean($showNumbers)">

всегда возвращает true (переменная showNumbers содержит значение элемента с  nameId="showPositionColumn")... Не важно, что я задам: true, false, 0 - всё равно условие проходит... 
PM   Вверх
diadiavova
Дата 3.4.2012, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Compositum @  3.4.2012,  22:14 Найти цитируемый пост)
как видим, имеется два логических значения... 

Не видим. Эти значения воспринимаются как строки. Так что надо было именно что изменить выражение. В таком виде точно работало бы
Код

$showNumbers = 'true'



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


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Цитата(diadiavova @ 3.4.2012,  21:30)
В таком виде точно работало бы
Код

$showNumbers = 'true'



да, в таком виде оно у меня и так изначально работало, но ведь это плохое решение... :( Сейчас поясню.

На самом деле элемент, которому я присваиваю логическое значение имеет такой тип:
Код

 xmlns:xs="http://www.w3.org/2001/XMLSchema"
...
  <!--ru-RU: Логическое значение, связанное с ID локализованного ресурса-->
  <xs:complexType name="boolValue">
    <xs:simpleContent>
      <xs:extension base="xs:boolean">
        <xs:attribute name="nameId" type="xs:string" use="required"/>
        <xs:attribute name="descriptionId" type="xs:string" use="optional"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
...

Т.е. я ожидаю, что XSL видя XSD схему сможет понять, что значение нужно воспринимать как логическое, а не строковое. Ведь проблема в том, что логическое значение "истина" может быть записано по разному: true, TRUE, True, TruE, 1. Не хотелось бы все варианты обрабатывать с помощью xsl:choose...



Это сообщение отредактировал(а) Compositum - 3.4.2012, 22:14
PM   Вверх
diadiavova
Дата 3.4.2012, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Compositum @  3.4.2012,  23:13 Найти цитируемый пост)
Т.е. я ожидаю, что XSL видя XSD схему

Я уже несколько раз сказал, что хсл вообще пофиг, что написано в схеме и пофиг, что ты от него ожидаешь. У него есть своя логика обработки и он следует только ей. А логика состоит в том, что для него это строка.
Цитата(Compositum @  3.4.2012,  23:13 Найти цитируемый пост)
Ведь проблема в том, что логическое значение "истина" может быть записано по разному: true, TRUE, True, TruE, 1. Не хотелось бы все варианты обрабатывать с помощью xsl:choose...

Либо введи ограничение на способ записи, либо предусмотри все варианты. Для реализации регистронезависимой проверки можно воспользоваться функцией translate, которая поможет унифицировать запись, путем приведения всех символов к одному регистру.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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