Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами / 16 сообщений из 16, страница 1 из 1
13.04.2007, 12:52
    #34458946
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
Дорого время суток всем.
Вопрос: как в конечный документ вытянуть теги без префикса
К примеру есть текст
Код: plaintext
<error>Warning: бла-бла-бла имя<name/></error>
Надо получить
Код: plaintext
<error>Warning: бла-бла-бла имя<xsl:value-of select="name()"></error>
а вылазит
Код: plaintext
Warning: бла-бла-бла имя<xsl:value-of select="name()">
как мне теги перетащить? Это пример, какие теги в оригинале мне не известны
Текст примерно обрабатывается так:
Вызов из элемента, где возможно содержание текста
<xsl:apply-templates mode="TEXT"/>
Один из шаблонов обрабатывающих команды в нутри текста
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
       <!--====================== NAME ===============================  -->
        <xsl:template match="sch:name | name" mode="TEXT">
                <xsl:if test="@path">
                        <xsl:call-template name="process-name">
                                <xsl:with-param name="name" select="concat('name(',@path,')')"/>
                        </xsl:call-template>
                </xsl:if>
                <xsl:if test="not(@path)">
                        <xsl:call-template name="process-name">
                                <xsl:with-param name="name" select="'name(.)'"/>
                        </xsl:call-template>
                </xsl:if>
        </xsl:template>
        <xsl:template name="process-name">
                <xsl:param name="name"/>
                <axsl:value-of select="{$name}"/>
        </xsl:template>
...
Рейтинг: 0 / 0
16.04.2007, 15:09
    #34463738
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
ничо не понял, тебе имя без префикса нужно вывести или теги?
...
Рейтинг: 0 / 0
16.04.2007, 15:19
    #34463785
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
Мне в конечном докумнете надо увидеть
Код: plaintext
<error>Warning: бла-бла-бла имя<xsl:value-of select="name()"></error>
Точнее, из того что я достал нехватает лишь тега <error>
Если бы он был один, я бы не парися написал его обработку, на худой случай просто бы создавал его зановно, но проблема в том что вывести этот тег мне надо полюбому, а имя я его заранее не знаю, а писать шаблоны на все возможные комбинации нецелесообразно
как вытащить теги которые не относяться ни к одному из простр. имен. Пускай в конце даже если оно в них появится
...
Рейтинг: 0 / 0
16.04.2007, 15:21
    #34463793
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
SuSaкак вытащить теги которые не относяться ни к одному из простр. имен
Код: plaintext
1.
2.
3.
4.
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
ну типа так
...
Рейтинг: 0 / 0
16.04.2007, 17:06
    #34464157
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
Это поможет если только они отстоят отдельно
А если я обрабатываю конструкцию типа
Код: plaintext
<if test="..."><error>Warning: бла-бла-бла имя <name/>!</error></if>
То есть
Код: plaintext
<error>Warning: бла-бла-бла имя <name/>!</error>
Выступает в роли текстового поля.
При этом: если выводить текст сам по себе проблем нет
если выводить текст+ описанные теги - проблем тоже нет
Вопрос: А как выводить текст+ описанные теги + неописанные (левые) теги ?
Т.е. либо их вывести либо как то аккуратно обработать чтобы в конце они появились там же где и должны быть.
...
Рейтинг: 0 / 0
17.04.2007, 14:33
    #34466684
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
<xsl:copy-of select="*"/>
Ты это хотел?
...
Рейтинг: 0 / 0
17.04.2007, 14:53
    #34466774
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
А сам так пробовал?
Спецально для тебя maXmo, чтобы ты не говорил что опять не понял привожу РАБОЧУЮ выдержку из своих файлов:
xsl:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"
	xmlns:sch="http://purl.oclc.org/dsdl/schematron">
	<xsl:namespace-alias result-prefix="xsl" stylesheet-prefix="axsl"/>
	<xsl:template match="//sch:assert | //assert">
		<xsl:comment>Assert </xsl:comment>
		<xsl:if test="not(@test)">
			<xsl:message terminate="yes"> Error: В <assert> не проставлено значение test</xsl:message>
		</xsl:if>
		<axsl:choose>
			<axsl:when>
				<xsl:attribute name="test">
					<xsl:value-of select="@test"/>
				</xsl:attribute> uslovie vipolnilos' udachno <xsl:value-of select="@id"
				/><xsl:text disable-output-escaping="yes">
 </xsl:text>
			</axsl:when>
			<axsl:otherwise>
				<xsl:apply-templates mode="TEXT"/>
			</axsl:otherwise>
		</axsl:choose>
	</xsl:template>
	<!--====================== NAME ===============================  -->
	<xsl:template match="sch:name | name" mode="TEXT">
		<xsl:if test="@path">
			<xsl:call-template name="process-name">
				<xsl:with-param name="name" select="concat('name(',@path,')')"/>
			</xsl:call-template>
		</xsl:if>
		<xsl:if test="not(@path)">
			<xsl:call-template name="process-name">
				<xsl:with-param name="name" select="'name(.)'"/>
			</xsl:call-template>
		</xsl:if>
	</xsl:template>
	<xsl:template name="process-name">
		<xsl:param name="name"/>
		<axsl:value-of select="{$name}"/>
	</xsl:template>
	<xsl:template match="/">
		<root>
			<xsl:apply-templates select="//sch:assert|//assert"/>
		</root>
	</xsl:template>
</xsl:stylesheet>
И файл на котором это надо проверить:
Код: plaintext
1.
2.
3.
4.
<?xml version="1.0" encoding="UTF-8"?>
<sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron"> 

 <sch:assert test="last()=1"><error>Warning: бла-бла-бла имя<name/></error></sch:assert>
</sch:schema>
Результат который есть:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sch="http://purl.oclc.org/dsdl/schematron">
    <!--Assert -->
    <xsl:choose>
        <xsl:when test="last()=1"> uslovie vipolnilos' udachno </xsl:when>
        <xsl:otherwise>Warning: бла-бла-бла имя<xsl:value-of select="name(.)"/></xsl:otherwise>
    </xsl:choose>
</root>
Результат который надо!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sch="http://purl.oclc.org/dsdl/schematron">
    <!--Assert -->
    <xsl:choose>
        <xsl:when test="last()=1"> uslovie vipolnilos' udachno </xsl:when>
        <xsl:otherwise><error>Warning: бла-бла-бла имя<xsl:value-of select="name(.)"/></error></xsl:otherwise>
    </xsl:choose>
</root>
...
Рейтинг: 0 / 0
17.04.2007, 14:57
    #34466789
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
А если применить предложенный тобой способ. получу вот так:
Код: plaintext
 <error>Warning: бла-бла-бла имя<name/></error>
Заметил разницу? Команды не отработались... это не только name , их там около 6 штук все описаны в отдельном шаблоне и имеют общий mode="TEXT"
...
Рейтинг: 0 / 0
17.04.2007, 15:10
    #34466849
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
а что, приведённый мною код не работает?
Код: plaintext
1.
2.
3.
4.
<xsl:template match="*" mode="TEXT">
<xsl:copy>
<xsl:apply-templates mode="TEXT"/>
</xsl:copy>
</xsl:template>
...
Рейтинг: 0 / 0
17.04.2007, 15:27
    #34466953
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
Хм .. интересно, там где такие теги были вывел относительно правильно(добавил ns, ну да ладно),
а вот где был токо текст и описанные команды ,вывел только обработанный результат команд, текст посеял гдето по дороге..
Интересно где
Возможен ли вариант для обоих случаев, неужели придется писать условие
...
Рейтинг: 0 / 0
17.04.2007, 15:31
    #34466980
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
Все разобрался...
оставил обработку как есть
<xsl:apply-templates mode="TEXT"/>
а в тело добавил твой шаблон, таким образом там где есть неописанные теги, он заходит в него и обрабатывает их, а где их нет обрабатывет описанные теги.
Все. maXmo спасибо.
...
Рейтинг: 0 / 0
17.04.2007, 15:38
    #34467011
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
SuSaВсе разобрался...
оставил обработку как есть
<xsl:apply-templates mode="TEXT"/>
а в тело добавил твой шаблоно.О
А сначала как делал?
...
Рейтинг: 0 / 0
17.04.2007, 15:45
    #34467038
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
Сначало подумал что обработать надо через твой шаблон
то есть:
Код: plaintext
<xsl:apply-templates select="*" mode="TEXT"/>
А вот из него уже пошли ссылки на мои шаблоны
Как оказалась логика была не верна
...
Рейтинг: 0 / 0
17.04.2007, 15:50
    #34467068
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
звёздочка не дёргает текстовые узлы
...
Рейтинг: 0 / 0
17.04.2007, 15:51
    #34467074
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
тогда уж select="*|text()"
...
Рейтинг: 0 / 0
17.04.2007, 15:52
    #34467078
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
но это вроде порядок нарушает…
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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