powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xml-тег как текст
6 сообщений из 6, страница 1 из 1
xml-тег как текст
    #37046497
inooni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день и с Новым Годом всех! Я уже вышел на работу и возник небольшой вопрос. имеется тег содержащий внутри другие теги и текст. мне нужно в помощью xslt-преобразовании записать в переменную этот тег как текст. как это сделать? функция string() возвращает только текст без самих тегов (в vs2010 проверяю)
...
Рейтинг: 0 / 0
xml-тег как текст
    #37046569
inooni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно, не совсем понятно для чего это мне нужно. Поясню: использую java + xalan для работы с xsl. В процессе обработки стиля xslt у меня делаются вызовы методов из java, примерно такие:

Код: plaintext
1.
2.
3.
xmlns:analysis="xalan://org.someorg.controller.core.utils.xml.xslt.XsltAnalysis"
...
<xsl:value-of select="analysis:doSomething($someVariable)"/>
где вызывается однопараметрический метод doSomething класса XsltAnalysis в который передается значение из переменной $someVariable. Мне понадобилось передать в этот метод не просто текстовое значение, а целую структуру тегов в виде текста. Если я в эту переменную кладу переменную, содержащую nodeset, то из-за того, что в сигнатуре метода параметр строка, то, как я подозреваю xalan передает в метод value-of от этой переменной, который содержит только текст, без тегов. copy-of в правильном виде сохраняет в выходном xml текст, но это происходит уже в результате, а мне нужно получить результат работы copy-of, только в процессе обработки xml в переменную.
...
Рейтинг: 0 / 0
xml-тег как текст
    #37046575
inooni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и еще, я понимаю, что есть и другие пути решения моей проблемы: можно получить кусок xml до или после обработки отдельно (например обработать с помощью стандартного xmldom, найти все нужные элементы и вызвать у них toXML()) и делать с ним что угодно, но хотелось бы узнать: возможно ли вообще в процессе обработки xslt получить содержимое тега (вместе с вложенными тегами и текстом, "как они есть" в исходном документе) в виде строки.
...
Рейтинг: 0 / 0
xml-тег как текст
    #37046678
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inooni,
Как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:template match="/">
		<xsl:variable name="q">
			<xsl:call-template name="subnode">
				<xsl:with-param name="sn" select="/root"/>
			</xsl:call-template>
		</xsl:variable>
		<xsl:value-of select="$q" disable-output-escaping="yes"/>
	</xsl:template>
	<!-- -->
	<xsl:template name="subnode">
		<xsl:param name="sn"/>
		<xsl:for-each select="$sn">
			<xsl:value-of select="concat('&lt;',name(),'&gt;')"/>
			<xsl:call-template name="subnode">
				<xsl:with-param name="sn" select="./*"/>
			</xsl:call-template>
			<xsl:value-of select="./text()"/>
			<xsl:value-of select="concat('&lt;/',name(),'&gt;')"/>
		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>
Если нужны атрибуты, пространства имен, то надо допилить...
...
Рейтинг: 0 / 0
xml-тег как текст
    #37047244
inooni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
refreginooni,
Как-то так:
Код: plaintext
...
Если нужны атрибуты, пространства имен, то надо допилить...

Спасибо большое, действительно интересный способ. Я его немного доработал:
Код: 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.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:gml="http://www.opengis.net/gml"
                version="1.0">
  <xsl:template match="/">
    <result>
      <xsl:for-each select="/root/gml:a">
        <xsl:variable name="q">
          <xsl:call-template name="getTagAsText">
            <xsl:with-param name="sn" select="."/>
          </xsl:call-template>
        </xsl:variable>
        <xsl:value-of select="$q" disable-output-escaping="yes"/>
        <xsl:element name="break">
          <xsl:value-of select="'========================='"/>
        </xsl:element>
      </xsl:for-each>
    </result>
  </xsl:template>

  <xsl:template name="getTagAsText">
    <xsl:param name="sn"/>
    <xsl:value-of select="concat('<',name($sn))"/>
    <xsl:for-each select="$sn/@*">
      <xsl:value-of select="concat(' ', name(), '="', . ,'"')"/>
    </xsl:for-each>
    <xsl:value-of select="'>'"/>
    <xsl:for-each select="$sn/*">
      <xsl:call-template name="getTagAsText">
        <xsl:with-param name="sn" select="."/>
      </xsl:call-template>
    </xsl:for-each>
    <xsl:value-of select="$sn/text()"/>
    <xsl:value-of select="concat('</',name($sn),'>')"/>
  </xsl:template>
</xsl:stylesheet>

успешно преобразует мою тестовую xml:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?xml version='1.0' encoding="windows-1251" ?>
<root xmlns:gml="http://www.opengis.net/gml">
	<gml:a x="y" bbb="bbb">
		<gml:b hohoho="12321312"> 123 </gml:b>
		<c dfg="ddd"> 111 </c>
	</gml:a>
	<gml:a>
		<aads> 12312312 </aads>
	</gml:a>
</root>

в такую:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="utf-8"?>
<result xmlns:gml="http://www.opengis.net/gml">
  <gml:a x="y" bbb="bbb">
    <gml:b hohoho="12321312"> 123 </gml:b>
    <c dfg="ddd"> 111 </c>
  </gml:a>
  <break>=========================</break>
  <gml:a>
    <aads> 12312312 </aads>
  </gml:a>
  <break>=========================</break>
</result>
...
Рейтинг: 0 / 0
xml-тег как текст
    #37047247
inooni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
немного неправильно выложилось: нужно <, > и " заменить на < > " в строках
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xml-тег как текст
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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