| Автор
| Сообщение |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
Здесь будем задавать вопросы на тему XSL
Последний раз редактировалось: Kate (Ср, 21-Янв-2009 20:40), всего редактировалось 3 раз(а) |
|
| В начало |
|
 |
|
|
 |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
Содержимое изменено автором...
Последний раз редактировалось: Kate (Ср, 21-Янв-2009 20:40), всего редактировалось 1 раз |
|
| В начало |
|
 |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
Такой вот вопрос появился,
есть к примеру элементарный xml-файл:
| XML: | <?xml version=".... ?> <rootElement> <childElement> Некий текст этого элемента, находящийся в корне этого дочернего элемента <innerChildElement> value of this innerChildElement </innerChildElement> </childElement> ... </rootElement>
|
вот как мне, используя XSL, достать ТОЛЬКО русский текст, содержащийся в элементе childElement, без других вложенных в него элементов.
пробую так - <xsl:value-of select="rootElement/childElement"/>,
и у меня, разумеется, выдается ВСЯ информация этого элемента - и текст, и содержимое внутреннего его элемента innerChildElement и пр.
Так как мне получить только ТЕКСТ элемента, БЕЗ вложенных в него элементов?
Заранее благодарна
ОТВЕТ: использовать node(). Выдает текст элемента. |
|
| В начало |
|
 |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
Вопрос № 2
Как выделить весь текст элемента, исключая вложенные элементы. Когда я использую функцию node() - то у меня выдается текст элемента, но до первого вложенного элемента, а тот текст, что после него - не выдается.
Вопрос № 3.
Если у меня значение элемента или его атрибута - одно слово типа Word1Word2Word3Andword4, т.е содержащее большие буквы, то есть ли возможность средствами XSL разбить на 4 отдельных слова - Word1, Word2, Word3, Andword4 и вывести их отдельно? |
|
| В начало |
|
 |
 Kate
Постоянный участник

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
Вопрос № 4.
Если я делаю XSL-трансформацию из входного XML в выходной XML, к примеру, вроде этой:
трансформация из входного файла in.xml:
| XML: | <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="out.xsl"?> <persons type="1"> <person username="MP123456"> <name>Ivan</name> <surname>Ivanov!</surname> </person> <person username="PK123456"> <name>Petr</name> <surname>Petrov</surname> </person> </persons>
|
в выходной xml-файл, в который транформируется файл in.xml через XSL-шаблон out.xsl:
| XML: | <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="person"> <record> <username> <xsl:value-of select="@username"/> </username> <fullname> <xsl:value-of select="name"/> <xsl:text> </xsl:text> <xsl:value-of select="surname"/> </fullname> </record> </xsl:template> </xsl:stylesheet>
|
Почему у меня браузер, когда я открываю файл in.xml, который должен открыть преобразованный xsl-лем выходной xml-файл, показывает xml-страницу не в формате xml (т.е. в виде иерархического списка с плюсиками и минусиками), а в виде просто текста, состоящего из значений xml-элементов?
Т.е. по сути xsl-файл формирует такую же xml-страницу, но она отображается в браузере не как xml-страница. Почему? Как быть? |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

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

Возраст: 27
Знак зодиака: 
Зарегистрирован: 04.06.2007
Сообщения: 149
|
|
|
Цитата |
|
Вообще-то да
Насколько я поняла, проверить, что xsl-файл действительно перевел файл in.xml в (в оперативной памяти) файл out.xml можно, либо попробовав обратиться к любому из новых элементов файла out.xml, либо вывести его в физический файл? Так? |
|
| В начало |
|
 |
 gelomek
Новичок

Возраст: 24
Знак зодиака: 
Зарегистрирован: 07.07.2011
Сообщения: 1
|
|
|
Цитата |
|
| Kate писал(а): | Вопрос № 2
Как выделить весь текст элемента, исключая вложенные элементы. Когда я использую функцию node() - то у меня выдается текст элемента, но до первого вложенного элемента, а тот текст, что после него - не выдается.
|
Для примера расширил входной xml, дополнив вторым дочерним и третьим текстовым элементом так:
| XML: | <rootElement> <childElement> Некий текст этого элемента, находящийся в корне этого дочернего элемента <innerChildElement> value of this innerChildElement </innerChildElement> А это по центру <innerChildElement> VALUE OF THIS INNERcHILDeLEMENT </innerChildElement> Некий текст этого элемента, после дочернего элемента </childElement> </rootElement>
|
Что бы получить доступ к текстовым элементам childElement использовал такое преобразование:
| XML: | <xsl:template match="/"> <xsl:for-each select="/rootElement/childElement"> <xsl:value-of select="text()[position() = 1]"/> <br/> <xsl:value-of select="text()[position() = 2]"/> <br/> <xsl:value-of select="text()[position() = 3]"/> <br/> </xsl:for-each> </xsl:template>
|
Результат:
| HTML: | Некий текст этого элемента, находящийся в корне этого дочернего элемента <br/>Некий текст этого элемента, после дочернего элемента <br/>
|
Такой же результат можно вывести перебором for-each:
| XML: | <xsl:template match="/"> <xsl:for-each select="/rootElement/childElement"> <xsl:for-each select="text()"> <xsl:value-of select="."/> <br/> </xsl:for-each> </xsl:for-each> </xsl:template>
|
P/S когда вы строите структуру xml, желательно что-бы все значения были заключены в элемент или являлись атрибутом, так правильнее и доступ удобнее. |
|
| В начало |
|
 |
|