Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


Вопросы по XSL


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеПт, 19-Дек-2008 19:28    Заголовок сообщения: Вопросы по XSL
Цитата

Здесь будем задавать вопросы на тему XSL

Последний раз редактировалось: Kate (Ср, 21-Янв-2009 20:40), всего редактировалось 3 раз(а)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеПт, 09-Янв-2009 13:24 
Цитата

Содержимое изменено автором...

Последний раз редактировалось: Kate (Ср, 21-Янв-2009 20:40), всего редактировалось 1 раз
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеСр, 21-Янв-2009 20:38 
Цитата

Такой вот вопрос появился,
есть к примеру элементарный xml-файл:
XML:
  1.  
  2. <?xml version=".... ?>
  3. <rootElement>
  4.  <childElement>
  5.   Некий текст этого элемента, находящийся в корне этого дочернего элемента
  6.   <innerChildElement>
  7.     value of this innerChildElement
  8.   </innerChildElement>
  9.  </childElement>
  10.  ...
  11. </rootElement>
  12.  


вот как мне, используя XSL, достать ТОЛЬКО русский текст, содержащийся в элементе childElement, без других вложенных в него элементов.

пробую так - <xsl:value-of select="rootElement/childElement"/>,
и у меня, разумеется, выдается ВСЯ информация этого элемента - и текст, и содержимое внутреннего его элемента innerChildElement и пр.

Так как мне получить только ТЕКСТ элемента, БЕЗ вложенных в него элементов?

Заранее благодарна :)

ОТВЕТ: использовать node(). Выдает текст элемента.
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеЧт, 22-Янв-2009 11:07 
Цитата

Вопрос № 2

Как выделить весь текст элемента, исключая вложенные элементы. Когда я использую функцию node() - то у меня выдается текст элемента, но до первого вложенного элемента, а тот текст, что после него - не выдается.

Вопрос № 3.

Если у меня значение элемента или его атрибута - одно слово типа Word1Word2Word3Andword4, т.е содержащее большие буквы, то есть ли возможность средствами XSL разбить на 4 отдельных слова - Word1, Word2, Word3, Andword4 и вывести их отдельно?
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеВс, 25-Янв-2009 10:22 
Цитата

Вопрос № 4.

Если я делаю XSL-трансформацию из входного XML в выходной XML, к примеру, вроде этой:

трансформация из входного файла in.xml:
XML:
  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="out.xsl"?>
  3. <persons type="1">
  4.   <person username="MP123456">
  5.     <name>Ivan</name>
  6.     <surname>Ivanov!</surname>
  7.   </person>
  8.   <person username="PK123456">
  9.     <name>Petr</name>
  10.     <surname>Petrov</surname>
  11.   </person>
  12. </persons>


в выходной xml-файл, в который транформируется файл in.xml через XSL-шаблон out.xsl:
XML:
  1. <?xml version="1.0"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3. <xsl:output method="xml" indent="yes"/>
  4.  <xsl:template match="person">
  5.      <record>
  6.         <username>
  7.            <xsl:value-of select="@username"/>
  8.         </username>
  9.         <fullname>
  10.            <xsl:value-of select="name"/>
  11.            <xsl:text> </xsl:text>
  12.            <xsl:value-of select="surname"/>
  13.         </fullname>
  14.      </record>
  15.   </xsl:template>
  16. </xsl:stylesheet>


Почему у меня браузер, когда я открываю файл in.xml, который должен открыть преобразованный xsl-лем выходной xml-файл, показывает xml-страницу не в формате xml (т.е. в виде иерархического списка с плюсиками и минусиками), а в виде просто текста, состоящего из значений xml-элементов?
Т.е. по сути xsl-файл формирует такую же xml-страницу, но она отображается в браузере не как xml-страница. Почему? Как быть?
В начало
Посмотреть профиль Отправить личное сообщение
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеПн, 26-Янв-2009 10:43 
Цитата

Для браузера это уже не XML-файл, а результат его обработки. У него ж движок не рекурсивный. Иначе можно было написать, к примеру, такой скрипт, который на выходе тоже давал скрипт, который броузер опять бы выполнял... и так пока не сдохнет :)
_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Жен Kate
Постоянный участник


Возраст: 27
Знак зодиака: Стрелец
Зарегистрирован: 04.06.2007
Сообщения: 149

СообщениеВс, 22-Фев-2009 8:45 
Цитата

Вообще-то да YES !!!
Насколько я поняла, проверить, что xsl-файл действительно перевел файл in.xml в (в оперативной памяти) файл out.xml можно, либо попробовав обратиться к любому из новых элементов файла out.xml, либо вывести его в физический файл? Так?
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж gelomek
Новичок


Возраст: 24
Знак зодиака: Стрелец
Зарегистрирован: 07.07.2011
Сообщения: 1

СообщениеПт, 08-Июл-2011 19:54 
Цитата

Kate писал(а):
Вопрос № 2

Как выделить весь текст элемента, исключая вложенные элементы. Когда я использую функцию node() - то у меня выдается текст элемента, но до первого вложенного элемента, а тот текст, что после него - не выдается.

Для примера расширил входной xml, дополнив вторым дочерним и третьим текстовым элементом так:
XML:
  1. <rootElement>
  2.  <childElement>
  3.   Некий текст этого элемента, находящийся в корне этого дочернего элемента
  4.   <innerChildElement>
  5.     value of this innerChildElement
  6.   </innerChildElement>
  7.   А это по центру
  8.   <innerChildElement>
  9.     VALUE OF THIS INNERcHILDeLEMENT
  10.   </innerChildElement>
  11.   Некий текст этого элемента, после дочернего элемента
  12.  </childElement>
  13. </rootElement>

Что бы получить доступ к текстовым элементам childElement использовал такое преобразование:
XML:
  1. <xsl:template match="/">
  2.   <xsl:for-each select="/rootElement/childElement">
  3.     <xsl:value-of select="text()[position() = 1]"/>
  4.     <br/>
  5.     <xsl:value-of select="text()[position() = 2]"/>
  6.     <br/>
  7.     <xsl:value-of select="text()[position() = 3]"/>
  8.     <br/>
  9.   </xsl:for-each>
  10. </xsl:template>

Результат:
HTML:
  1. Некий текст этого элемента, находящийся в корне этого дочернего элемента <br/>
  2. А это по центру <br/>
  3. Некий текст этого элемента, после дочернего элемента<br/>

Такой же результат можно вывести перебором for-each:
XML:
  1. <xsl:template match="/">
  2.   <xsl:for-each select="/rootElement/childElement">
  3.     <xsl:for-each select="text()">
  4.       <xsl:value-of select="."/>
  5.       <br/>
  6.     </xsl:for-each>
  7.   </xsl:for-each>
  8. </xsl:template>


P/S когда вы строите структуру xml, желательно что-бы все значения были заключены в элемент или являлись атрибутом, так правильнее и доступ удобнее.
В начало
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100