Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Шаблон разбора строки с разделителями xslt / 25 сообщений из 33, страница 1 из 2
26.09.2017, 15:32
    #39526532
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Вход:
<list>
...
<tourists>10/null/IVANOVA/OLGA/MRS|8/2005-09-30/IVANOV/ALEXEY/MR|7/2008-12-15/IVANOVA/ALESYA/MRS|</tourists>
...
</list>


Ожидаемый результат:
<touristInfo>
...
<touristGroup>
<tourist type='ADT'>
<prefix>MRS</prefix>
<name>OLGA</name>
<surname>IVANOVA</surname>
</tourist>
<tourist type='CHD' birthDate='2005-09-30'>
<prefix>MR</prefix>
<name>OLEXEY</name>
<surname>IVANOV</surname>
</tourist>
<tourist type='INF' birthDate='2008-12-15'>
<prefix>MRS</prefix>
<name>ALESYA</name>
<surname>IVANOVA</surname>
</tourist>
</touristGroup>
...
</touristInfo>

Подскажите как привети исходный xml файл к виду, представленному в ожидаемом результате
...
Рейтинг: 0 / 0
26.09.2017, 15:56
    #39526560
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Вальтрон,

Для начала сформулировать правила трансформации. А потом воспользоваться функциями substring-before(), substring-after()
...
Рейтинг: 0 / 0
26.09.2017, 17:14
    #39526634
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
_Vasilisk_,
Спасибо!
Я пока совсем профан в этом деле, решил познакомится с xslt на реальных задачах. Поясните пожалуйста, что подразумевается под формулировкой правил трансформации?
...
Рейтинг: 0 / 0
26.09.2017, 18:25
    #39526678
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Вальтрончто подразумевается под формулировкой правил трансформации?По какому принципу Вы собираетесь исходную строку раскладывать по различным тегам
...
Рейтинг: 0 / 0
26.09.2017, 23:21
    #39526792
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
_Vasilisk_,

Подскажите пожалуйста, где про это можно подробно почитать
...
Рейтинг: 0 / 0
27.09.2017, 04:00
    #39526830
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
ВальтронПодскажите пожалуйста, где про это можно подробно почитать
ни где про это не прочитаешь, это чистая логика в программировании...чтоб было понятно о чем тебя спросил _Vasilisk_ делаю поправку:
1. у тебя в входном файле строка - в которой есть два разделителя (так или как?)
2. в исходном файле у тебя появляются значения которых нет в входном файле type='ADT'(откуда они беруться???)
3. birthDate='2005-09-30' - этот параметер тоже не везде (и как с этим жить?)
4. и т.д.
Тебе нужно научиться правильно и последовательно понять откуда что береться и куда вставляется....и главное понять как работать с данными если они не по шаблону приходят?

если ты только начал изучать технологию XSLT то тебе так же необходимо написаться терминологией чтоб понимать те советы которые тут будут писать иначе будет сложно с тобой общаться.. наберись терпения и посмотри видео уроки на ютубе
YouTube Video
...
Рейтинг: 0 / 0
27.09.2017, 06:36
    #39526832
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Фридрих,

Спасибо огромное, добрый человек!
По поводу задания, полностью звучит оно так:
Необходимо написать шаблон для разбора строки с разделителями
Каждая строка - это список туристов, путешествующих вместе. Информация о каждом туристе отделена символом '|'. Информация по каждому туристу включает:
тип туриста (10 — взрослый, 8 — ребенок, 7 — младенец),
день рождения для детей и младенцев,
фамилия,
имя,
префикс.
Вся перечисленная выше информация разделяется символом '/'. Необходимо составить xml документ, содержащий данные по всем туристам, сохраняя их принадлежность к группе.

Ну и пример описан выше.
...
Рейтинг: 0 / 0
27.09.2017, 07:58
    #39526840
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Вальтрон,

звучит так, как будто ты фрилансер, который нарвался на не тривиальную задачу...
ты писал "Я пока совсем профан в этом деле, решил познакомится с xslt на реальных задачах"
так хоть напиши пару строк кода, чтоб было что тебе исправлять и учиться, а то ты просишь готовое решение, а на готовом решении ты не научишься... _Vasilisk_ тебе уже дал подсказку как работать со строками... если ты не хочешь тут ни кого обманывать то заплати и получи результат _Vasilisk_ тебе поможет, я не зарабатываю на этом..
...
Рейтинг: 0 / 0
27.09.2017, 08:13
    #39526845
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Вальтрон,

чуть не забыл, твой пример не тот на котором нужно начинать учиться... потому что нужно делать "временное дерево", что заставляет точно знать какой процессор будет делать преобразование? Так же нужно сделать "справочник" чтоб расшифровывать тип туриста и так же надо знать что делать если возраст не указан или не указанно еще какие данные?
...
Рейтинг: 0 / 0
27.09.2017, 12:25
    #39527046
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Фридрих,

я не хочу никого обманывать и я не фрилансер. Это тестовое задание для участия в конкурсе на бесплатные курсы по xslt разработке. В требованиях ничего сверхъестественного не было указано, я не думал, что задание окажется таким сложным.
Для решения этого задания вроде как может пригодиться tokenize, но я не могу уловить структуру конечного файла, как сделать так, что бы в нем появились теги <prefix>, <name>, <surname> и другие, которых нет в исходном файле.
В любом случае спасибо за советы и ссылку на видеоуроки
...
Рейтинг: 0 / 0
27.09.2017, 12:28
    #39527048
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Фридрих,
Видимо ответом на мой вопрос про теги кроется в понятии временного дерева)
...
Рейтинг: 0 / 0
27.09.2017, 14:11
    #39527123
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Вальтрон,

всё верно, нужно использовать расширения в котором есть tokenize поэтому я написал перечень вопросов....
ты хоть что то напиши, хоть начало самого преобразования... я ведь писал что нужно видеть твою логику мышления...
и ответь на вопросы
1. какой процессор используется?
2. есть ли для него расширения EXSLT?
3. где будет делаться преобоазование? на сервере или на клиенте?
4. где список того, что означает ребенок или взрослый?
5. что делать если не указан возраст?
6. что делать если не будет хватать других данных? имени или фамилии
7. что делать если будут те данные которые тут вообще не указаны?

посмотри видео урок и там всё ясно и так хорошо разжеванно, откуда беруться новые теги(ты их сам пишешь в шаблоне)....
...
Рейтинг: 0 / 0
27.09.2017, 14:31
    #39527135
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Вальтрон,

и зачем тебе куда то записываться? в этом видео есть всё для начала, этот курс на самом деле классный, делай там задания которые есть и будет тебе халявные курсы...а что не понятно будет - спрашивай на форуме или иши в англоязычном гугле примеры....я так сам и учил...
...
Рейтинг: 0 / 0
27.09.2017, 14:57
    #39527153
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Фридрихнужно делать "временное дерево"Не нужно. Обычный линейный рекурсивный разбор с прямым выхлопом.

Хотя да, с временным деревом будет немного читабельней
...
Рейтинг: 0 / 0
27.09.2017, 15:20
    #39527171
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Фридрих,

по заданию нужно преобразовать следующий xml файл:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<tourists>10/null/IVANOVA/OLGA/MRS|8/2005-09-30/IVANOV/ALEXEY/MR|7/2008-12-15/IVANOVA/ALESYA/MRS|</tourists>
<tourists>10/null/PETROV/SERGEI/MR|10/null/PETROVA/KATERINA/MRS|8/2005-09-30/PETVOV/ANDREY/MR|7/2008-12-15/PETROVA/ALLA/MRS|10/null/PETROVA/MARGARITHA/MRS|</tourists>
<tourists>10/null/WERDOV/PAVEL/MS|7/2008-12-15/WERDOVA/OKSANA/MRS|</tourists>
<tourists>10/null/KAVADERKO/SASHA/MRS|</tourists>
<tourists></tourists>
</list>

Рекомендуется пользоваться: http://www.w3schools.com/

На Ваши вопросы я ответить не могу. Это вся информация, которая у меня есть.
Я пока что разобрался как выводить строки в таком виде, каком они есть:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl=" http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="list/tourists">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Сейчас буду пробовать выводить не все данные в строке. Пользуюсь статьей http://www.codenet.ru/webmast/xml/xslt/4_1.php
...
Рейтинг: 0 / 0
27.09.2017, 16:00
    #39527189
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
_Vasilisk_,

человек решает сложноватую задачу для начинающего и уже пишет про exslt...вот мне и не понятно стало некоторые моменты...
ты ведь понимаешь что решать задачи можно только и исключительно любимым методом....
а те видео которые я предложил - я на них сам учился лежа на диване, тупо пересматривал чтоб понять сам принцип преобразования....и аж только потом стал что то сам делать...ты же понимаешь что нет смысла учить xslt как стихотворение...вот как то пытаюсь доносить это до людей...
...
Рейтинг: 0 / 0
27.09.2017, 16:03
    #39527194
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Вальтрон,

ты в каком редакторе работаешь? или через браузер или как? где делаешь преобразование?
вот тебе страница про твое tokenize http://exslt.org/str/functions/tokenize/index.html
...
Рейтинг: 0 / 0
27.09.2017, 16:06
    #39527196
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Фридрих,

Преобразования делаю здесь: http://www.w3schools.com/
Благодарю за ссылку!
...
Рейтинг: 0 / 0
27.09.2017, 16:21
    #39527208
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Вальтрон,

вот это как раз таки и не понятно, будут ли работать exslt!? пробуй сделать в браузере мозила может там сработает, вроде пишут что должно....
...
Рейтинг: 0 / 0
27.09.2017, 16:29
    #39527213
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Вальтрон,

вроде работает то что ты отправил вот тебе еще пример
http://xpoint.ru/know-how/XML/XSLT/CookBook/Split
...
Рейтинг: 0 / 0
27.09.2017, 17:55
    #39527248
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Фридрих,

На основании нескольких статей, в том числе Вами предложеных, у меня получился такого вида код:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl=" http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="list/tourists">
<xsl:variable name="varStartWith">2005</xsl:variable>
<xsl:variable name="vartourists">
<xsl:value-of select="."/></xsl:variable>
<xsl:if test="contains($vartourists,$varStartWith)">
<xsl:value-of select="."/><p/>
<xsl:for-each select="tokenize($vartourists, '|')">
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Но он к сожалению не работает. Может Вы подскажете что здесь не так?
...
Рейтинг: 0 / 0
27.09.2017, 18:59
    #39527271
Фридрих
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Вальтрон,

вот тебе xml
Код: xml
1.
2.
&#65279;<?xml version="1.0" encoding="UTF-8"?>
<data>foo;bar;baz</data>


вот тебе xsl
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:str="http://exslt.org/strings" version="1.0" exclude-result-prefixes="xsl str" extension-element-prefixes="str">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="data">
    <ul>
      <xsl:apply-templates select="str:tokenize(.,';')"/>
    </ul>
  </xsl:template>
  <xsl:template match="token">
    <li>
      <xsl:value-of select="."/>
    </li>
  </xsl:template>
</xsl:stylesheet>


проверь на работоспособность этот пример, будут ли ошибки, если ошибок нет, то
1. сравни загаловки в файлах
2. тебе нужно два раза разбивать строку по разным разделителям
3. результат разбивок записать во временное дерево
4. из временного дерева создавать те теги которые тебе не обходимы для вывода в конечный файл
не забудь указать префикс для node-set - это чтоб можно было обратиться к временному дереву...

вот такой вот план трансформации... ну и очень важно соблюдать синтаксис и велформ файла...
...
Рейтинг: 0 / 0
27.09.2017, 21:08
    #39527304
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
Фридрих,

В общей с этой задачей я не справлюсь, времени все меньше, разбираться еще видимо долго. Срок сдачи - завтра)
Может поможете с другим заданием?

Напишите шаблоны работы со строками

Исходный документ – Task2.xml

Файл содержит 4 элемента, содержимое каждого из которых должно измениться:

• Для <str1>: Изменить порядок символов в тексте на противоположный.
Пример. “scrap them all”  “lla meht parcs”
• Для <str2>: Вычленить из текста все цифры.
Пример. “s1cr23ap 4 t5hem6 all789”  “123456789”
• Для <str3>: Вычленить из текста все, кроме цифр.
Пример. “s1cr23ap 4 t5hem6 all789”  “scrap them all”
• Для <str4>: Подсчитать количество пробелов в тексте (включая переводы строки).
Пример. “scrap them all”  2

Содержание Task2.xml в прикрепленном файле.

я нашел описание функции, которая может мне помочь, но не могу разобраться как ее применить к данному случаю. Может Вы поясните немного подробней? Заранее благодарен.


Задача

Требуется изменить порядок символов в строке на противоположный.
Решение XSLT 1.0

Приведенный ниже шаблон обращает строку $input неочевидным, но весьма эффективным способом.
<xsl:template name="reverse">
<xsl:param name="input"/>
<xsl:variable name="len" select="string-length($input)"/>
<xsl:choose>
<!— Строки длиной меньше 2 обращаются тривиально –>
<xsl:when test="$len < 2">
<xsl:value-of select="$input"/>
</xsl:when>
<!– Строки длины 2 также обращаются тривиально –>
<xsl:when test="$len = 2">
<xsl:value-of select="substring($input,2,1)"/>
<xsl:value-of select="substring($input,1,1)"/>
</xsl:when>
<xsl:otherwise>
<!– Шаблон рекурсивно применяется сначала ко второй, а потом к первой половине входной строки —>
<xsl:variable name="mid" select="floor($len div 2)"/>
<xsl:call-template name="reverse">
<xsl:with-param name="input"
select="substring($input,$mid+1,$mid+1)"/>
</xsl:call-template> <xsl:call-template name="reverse">
<xsl:with-param name="input"
select="substring($input,1,$mid)"/>
</xsl:call-template> </xsl:otherwise>
</xsl:choose>
</xsl:template>
...
Рейтинг: 0 / 0
27.09.2017, 21:12
    #39527307
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
 - это спецсимволы, не знаю зачем они там
...
Рейтинг: 0 / 0
27.09.2017, 21:13
    #39527308
Вальтрон
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шаблон разбора строки с разделителями xslt
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Шаблон разбора строки с разделителями xslt / 25 сообщений из 33, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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