powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
16 сообщений из 16, страница 1 из 1
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #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
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34463738
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ничо не понял, тебе имя без префикса нужно вывести или теги?
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34463785
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне в конечном докумнете надо увидеть
Код: plaintext
<error>Warning: бла-бла-бла имя<xsl:value-of select="name()"></error>
Точнее, из того что я достал нехватает лишь тега <error>
Если бы он был один, я бы не парися написал его обработку, на худой случай просто бы создавал его зановно, но проблема в том что вывести этот тег мне надо полюбому, а имя я его заранее не знаю, а писать шаблоны на все возможные комбинации нецелесообразно
как вытащить теги которые не относяться ни к одному из простр. имен. Пускай в конце даже если оно в них появится
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34463793
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SuSaкак вытащить теги которые не относяться ни к одному из простр. имен
Код: plaintext
1.
2.
3.
4.
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
ну типа так
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34464157
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это поможет если только они отстоят отдельно
А если я обрабатываю конструкцию типа
Код: plaintext
<if test="..."><error>Warning: бла-бла-бла имя <name/>!</error></if>
То есть
Код: plaintext
<error>Warning: бла-бла-бла имя <name/>!</error>
Выступает в роли текстового поля.
При этом: если выводить текст сам по себе проблем нет
если выводить текст+ описанные теги - проблем тоже нет
Вопрос: А как выводить текст+ описанные теги + неописанные (левые) теги ?
Т.е. либо их вывести либо как то аккуратно обработать чтобы в конце они появились там же где и должны быть.
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34466684
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<xsl:copy-of select="*"/>
Ты это хотел?
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #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
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34466789
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если применить предложенный тобой способ. получу вот так:
Код: plaintext
 <error>Warning: бла-бла-бла имя<name/></error>
Заметил разницу? Команды не отработались... это не только name , их там около 6 штук все описаны в отдельном шаблоне и имеют общий mode="TEXT"
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #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
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34466953
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм .. интересно, там где такие теги были вывел относительно правильно(добавил ns, ну да ладно),
а вот где был токо текст и описанные команды ,вывел только обработанный результат команд, текст посеял гдето по дороге..
Интересно где
Возможен ли вариант для обоих случаев, неужели придется писать условие
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34466980
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все разобрался...
оставил обработку как есть
<xsl:apply-templates mode="TEXT"/>
а в тело добавил твой шаблон, таким образом там где есть неописанные теги, он заходит в него и обрабатывает их, а где их нет обрабатывет описанные теги.
Все. maXmo спасибо.
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34467011
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SuSaВсе разобрался...
оставил обработку как есть
<xsl:apply-templates mode="TEXT"/>
а в тело добавил твой шаблоно.О
А сначала как делал?
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34467038
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначало подумал что обработать надо через твой шаблон
то есть:
Код: plaintext
<xsl:apply-templates select="*" mode="TEXT"/>
А вот из него уже пошли ссылки на мои шаблоны
Как оказалась логика была не верна
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34467068
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
звёздочка не дёргает текстовые узлы
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34467074
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда уж select="*|text()"
...
Рейтинг: 0 / 0
Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
    #34467078
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но это вроде порядок нарушает…
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Вытаскивание текста с обрабатываемыми/необрабатываемыми тегами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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