powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSL + XML = XML
6 сообщений из 6, страница 1 из 1
XSL + XML = XML
    #36841831
Ichisen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача довольна нестандартна, нужно разработать универсальный xls который бы мог повторить обработку xml документа парсером Internet Explorer 5.
Застрял на моменте выгрузки всего содержимого xml документа.

Хочется чтобы после наложения xsl возможно было получить полное содержимое xml документа.
...
Рейтинг: 0 / 0
XSL + XML = XML
    #36842162
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ichisen,

может все же xsl+xml=html?

в противном случае универсальный шаблон выглядит так:
Код: plaintext
1.
2.
<xsl:template match="/">
   <xsl:copy-of select="."/>
</xsl:template>
...
Рейтинг: 0 / 0
XSL + XML = XML
    #36842242
Ichisen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan,

Да всё верно XSL + XML = HTML


Только загвоздко в том что в хтмле должно быть что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="tect.xslt"?>
<room>
  <element typ="мебель" idp="1">
    <name>Стул</name>
    <size>Большой</size>
    <Vv> 1234 </Vv>
  </element>
  <element typ="игрушка" idp="2">
    <name>Зайка</name>
    <size>Мелкий</size>
    <Vv> 33452 </Vv>
  </element>
  <element typ="безделушка" idp="3">
    <name>Браслет</name>
    <size>Мелоч</size>
    <Vv> 563 </Vv>
  </element>
</room>
...
Рейтинг: 0 / 0
XSL + XML = XML
    #36842367
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ichisen,

Что-то типа такого?
Код: 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.
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <html>
            <head>
                <title>Бред</title>
            </head>
            <body>
                & lt;<xsl:apply-templates select="/*" mode="root"/>& gt;<br/>
                <xsl:apply-templates select="/*/*" mode="child"/>
                & lt;/<xsl:apply-templates select="/*" mode="root"/>& gt;<br/>
            </body>
        </html>
    </xsl:template>
    <!-- -->
    <xsl:template match="*" mode="root">
        <xsl:value-of select="name(.)"/>
    </xsl:template>
    <!-- -->
    <xsl:template match="*" mode="child">
        & lt;<xsl:value-of select="name(.)"/>& gt;<br/>
        <xsl:apply-templates select="./*" mode="child"/>
        & lt;/<xsl:value-of select="name(.)"/>& gt;<br/>
    </xsl:template>
</xsl:stylesheet>

PS. C атрибутами, текстами, отступами заморачиваться пока не охота... Может кто допилит...
...
Рейтинг: 0 / 0
XSL + XML = XML
    #36842450
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
<?xml version="1.0" encoding="Windows-1251"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <html>
            <head>
                <title>Не бред</title>
	   <STYLE>
		 .delemiter { color: Black; font-weight: bold }
	 	 .attrName { color: Red }
		 .attrValue { color: Navy }
		 .tagName { color: Green }
		 .ml {  margin-left: 1cm }
		 .text { color: Black }
	    </STYLE>
            </head>
            <body>
		<xsl:apply-templates select="/" mode="debug" />
            </body>
        </html>
    </xsl:template>
    <xsl:template match="text()" mode="debug">
	<SPAN CLASS="text">
		<xsl:value-of select="."/>
	</SPAN>
    </xsl:template>
    <xsl:template match="@*" mode="debug">
	<xsl:text> </xsl:text>
	<SPAN CLASS="attrName">
		<xsl:value-of select="name()"/>
	</SPAN>
	<SPAN CLASS="delemiter">
		<xsl:text>="</xsl:text>
	</SPAN>
	<SPAN CLASS="attrValue">
		<xsl:value-of select="."/>
	</SPAN>
	<SPAN CLASS="delemiter">
		<xsl:text>"</xsl:text>
	</SPAN>
    </xsl:template>
    <xsl:template match="*" mode="debug">
        <DIV>
	<xsl:attribute name="CLASS">
		<xsl:text>tagName</xsl:text>
		<xsl:if test="ancestor::*">
			<xsl:text> ml</xsl:text>
		</xsl:if>
	</xsl:attribute>
	<SPAN CLASS="delemiter">
		<xsl:text>&lt;</xsl:text>
	</SPAN>
	<xsl:value-of select="name()"/>
	<xsl:apply-templates select="@*" mode="debug" />
	<SPAN CLASS="delemiter">
		<xsl:text>&gt;</xsl:text>
	</SPAN>
	<xsl:apply-templates select="text()|node()" mode="debug" />
	<SPAN CLASS="delemiter">
		<xsl:text>&lt;/</xsl:text>
	</SPAN>
	<xsl:value-of select="name()"/>
	<SPAN CLASS="delemiter">
		<xsl:text>&gt;</xsl:text>
	</SPAN>
          </DIV>
    </xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
XSL + XML = XML
    #36844052
Ichisen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно написал свой вариант

Код: 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.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
<?xml version="1.0"  encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>

<xsl:template match="/">
	<html>
		<head>
			<title>My pattern</title>
			<style type="text/css">
        body { font-size: 14px; font-family: Tahoma; }
        
        img { border: 0px solid black; margin: 0px; padding: 0px }
        div.chil * { vertical-align: middle }

        .link { cursor: pointer; }
        .red, .link { color: # 990000  }
        .blue { color: #3a00ff; }
        .black { font: bold; color: # 000000 ; }
      </style>
			<script type="text/javascript">
				function OpenClose(span) {
					var div = span.nextSibling
					var img = span.getElementsByTagName('img')[ 0 ]
					
					if (div.style.display == 'inline') {
						div.style.display = 'none';
						img.src = 'pl.jpg';
					} else {
						div.style.display = 'inline';
						img.src = 'min.jpg';
					}
				}
			</script>
		</head>
		<body>
			<xsl:apply-templates mode="TREE"/>
		</body>
	</html>
</xsl:template>

<!-- Конструктор дерева -->
<xsl:template match="*" mode="TREE">
	<div class="chil">
		<xsl:apply-templates select="ancestor::*" mode="ind"/>
		<xsl:choose>
			<xsl:when test="./*">
				<span class="link" style="cursor: pointer;" onclick="OpenClose(this);">
					<img src="min.jpg" width="8px" height="7px"/> 
					<xsl:apply-templates select="." mode="OT"/>
				</span>
				<div style="display: inline;">
					<xsl:apply-templates mode="TREE"/>
					<xsl:apply-templates select="ancestor::*" mode="ind"/>
					<xsl:apply-templates select="." mode="CT"/>
				</div>
			</xsl:when>
			
			<xsl:otherwise>
				
					<xsl:choose>
						<xsl:when test=". = ''">
							<xsl:apply-templates select="." mode="HT"/>							
						</xsl:when>
						
						<xsl:otherwise>
							<xsl:apply-templates select="." mode="OT"/>
							<span class="black">
                <xsl:value-of select="text()"/></span>
							<xsl:apply-templates select="." mode="CT"/>
						</xsl:otherwise>
					</xsl:choose>
			</xsl:otherwise>
		</xsl:choose>
	</div>
</xsl:template>

<!-- Конструктор открывающего тага -->
<xsl:template match="*" mode="OT">
	<span class="blue"><</span>
	<span class="red"><xsl:value-of select="name()"/></span>
	<xsl:apply-templates select="." mode="atr"/>
	<span class="blue">></span>
</xsl:template>

<!-- Конструктор закрывающего тага -->
<xsl:template match="*" mode="CT">
	<span class="blue"></</span>
	<span class="red"><xsl:value-of select="name()"/></span>
	<span class="blue">></span>
</xsl:template>

<!-- Конструктор пустого тага -->
<xsl:template match="*" mode="HT">
	<span class="blue"><</span>
	<span class="red"><xsl:value-of select="name()"/></span>
	<xsl:apply-templates select="." mode="atr"/>
	<span class="blue">/></span>
</xsl:template>

<!-- Конструктор атрибутов -->
<xsl:template match="*" mode="atr">
	<xsl:for-each select="@*">
		<span class="red"> <xsl:value-of select="name()"/></span>
		<span class="blue">="</span>
		<span class="black"><xsl:value-of select="."/></span>
		<span class="blue">"</span>
	</xsl:for-each>
</xsl:template>

<!-- Отступы -->
<xsl:template match="*" mode="ind">
	<xsl:text>     </xsl:text>
</xsl:template>

  
</xsl:stylesheet>

Но есть ещё одна проблема, есть ли возможность вывести старшую декларацию а ещё каким либо образов выяснить есть ли в документе дтд.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSL + XML = XML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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