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

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

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

в противном случае универсальный шаблон выглядит так:
Код: plaintext
1.
2.
<xsl:template match="/">
   <xsl:copy-of select="."/>
</xsl:template>
...
Рейтинг: 0 / 0
12.09.2010, 12:12
    #36842242
Ichisen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSL + XML = XML
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
12.09.2010, 15:29
    #36842367
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSL + XML = XML
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
12.09.2010, 18:05
    #36842450
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSL + XML = XML
Код: 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
13.09.2010, 17:23
    #36844052
Ichisen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XSL + XML = XML
Собственно написал свой вариант

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


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