Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / как в HMTL отобразить 2 взаимосвязанных XML / 3 сообщений из 3, страница 1 из 1
22.08.2019, 14:06
    #39852720
natjer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в HMTL отобразить 2 взаимосвязанных XML
Хочу в HMTL отобразить 2 взаимосвязанных XML. Пусть это будет
1). список папок, исполъзуемых в эл. почте и
2). Содержимое этих папок – письма.
Реализованы xsl, отображающие папки и содержимое конкретной папки (письма фильтрирую по значению параметра).

folders.xml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href="folders.xsl"?>
<folders>
	<name order="1" id="Inbox">Inbox</name>
	<name order="2" id="Outbox">Outbox</name>
	<name order="3" id="Fld165">Folder 3</name>
	<name order="4" id="Fld125">Folder 4</name>
	<name order="5" id="Fld242">Folder 5</name>
	<name order="6" id="Fld353">Folder 6</name>
</folders>



folders.xsl:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <ul> 
    <xsl:for-each select="folders/name">
      <li>
        <xsl:value-of select="text()"/>
      </li>
    </xsl:for-each>
    </ul> 
  </body>
</html>



mails.xml:
Код: xml
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.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type='text/xsl' href="mails.xsl?gpSelectedFolder='Inbox'"?>
<mails>
  <mail id="1245">
    <folderId>Inbox</folderId>
    <from><name>Name 1</name><mailAddress>name.1@mail.com<;/mailAddress></from>
    <sentDateTime>2019-01-01 01:01:01</sentDateTime>
    <subject>Mail 1</subject>
    <text>some text. Mail with 2 attachments</text>
    <attachments>
	  <attachment id="1" name="File Nr. 1" link="file1" type="pdf"/>
	  <attachment id="2" name="File Nr. 2" link="file2" type="word"/>
	</attachments>
  </mail>
  <mail id="127">
    <folderId>Inbox</folderId>
    <from><name>Name 1</name><mailAddress>name.1@mail.com<;/mailAddress></from>
    <sentDateTime>2019-01-03 05:08:01</sentDateTime>
    <subject>Others mail</subject>
    <text>some text. Mail without attachment</text>
  </mail>
  <mail id="178">
    <folderId>Fld165</folderId>
    <from><name>Name 1</name><mailAddress>name.1@mail.com<;/mailAddress></from>
    <sentDateTime>2019-01-03 05:01:01</sentDateTime>
    <subject>Mails 3</subject>
    <text>some text. Mail in other folder</text>
  </mail>
  <mail id="17808">
    <folderId>Outbox</folderId>
    <to><name>Name 1</name><mailAddress>name.1@mail.com<;/mailAddress></to>
    <to><name>Name 2</name><mailAddress>name.2@mail.com<;/mailAddress></to>
    <sentDateTime>2019-01-03 05:01:01</sentDateTime>
    <subject>I sent</subject>
    <text>Sent mail for 2 users. Mail with 3 attachments</text>
    <attachments>
	  <attachment id="1" name="File Nr. 1" link="file1" type="pdf"/>
	  <attachment id="2" name="File Nr. 2" link="file2" type="word"/>
	  <attachment id="3" name="File Nr. 3" link="file3" type="word"/>
	</attachments>
  </mail>
</mails>



mails.xsl:
Код: xml
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.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:param name="gpSelectedFolder" select="'Outbox'"/>

<xsl:output method="html" encoding="utf-8" omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="/">
 <html>
   <body>
     <xsl:call-template name="mailListInFolder"/>
   </body>
   </html>
</xsl:template>

<xsl:template name="mailListInFolder">
  <div>
   <h1>Mails</h1>
   <br/>
  <table border="1">
    <thead>
	  <tr>
      <td>FolderId</td>
      <td>Laikas</td>
      <td>From</td>
      <td>To</td>
      <td>Subject</td>
	  </tr>
    </thead>
    <tbody>
      <xsl:for-each select="mails/mail[folderId=$gpSelectedFolder]">
	    <tr>
          <td><xsl:value-of select="folderId"/></td>
          <td><xsl:value-of select="sentDateTime"/></td>
          <td><xsl:value-of select="from"/></td>
          <td><xsl:value-of select="to"/></td>
          <td><xsl:value-of select="subject"/></td>
        </tr>
      </xsl:for-each>
    </tbody>
  
  </table>
  </div>
</xsl:template>
	
</xsl:stylesheet> 




Список папок и содержимое отображаю в html:
Код: html
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.
<!DOCTYPE html>
<html>
<head>
    <title>Try HTML</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	
</head>


<body>
  <div>
    <h1>List of folders</h1>
    <script type="text/javascript">
	  document.write(" <iframe  id='frameFolders' name='frameFolders' src='xml/folders.xml'></iframe>");
    </script>
  </div>

  
  <div>
    <h1>List of mails</h1>
    <script type="text/javascript">
  	document.write(" <iframe  id='frameMails' name='frameMails' src='xml/mails.xml'  allowfullscreen></iframe>");
    </script>
  </div>
</body>


</html>




Подскажите, как отобразить список писем из другой папки. Цель - кликнуть по фреиму frameFolders и перезагрузить frameMails.
Как кликнуть и узнать, что за значение frameFolders выбрано, уже знаю. Никак не получается передать это в xsl (url xml/mails.xml?параметр=значение не работает; XMLHttpRequest выдает ошибку Access is denied (проверено в IE, Firefox) при установленной опции Miscellaneous -> Access Data sources accross domain -> Enable).
...
Рейтинг: 0 / 0
22.08.2019, 16:24
    #39852857
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в HMTL отобразить 2 взаимосвязанных XML
XSL преобразование нужно делать на сервере. А клиенту возвращать готовый HTML.

Для преобразования на клиенте для IE может сработать такой код
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
var source = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.6.0");
source.async = false;
source.validateOnParse = true;
if (source.load(xmlFile) {
  var stylesheet = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.6.0");
  stylesheet.async = false
  stylesheet.validateOnParse = true;
  if (stylesheet.load(xslFile)) {
    var xsltemp = new ActiveXObject("Msxml2.XSLTemplate.6.0");
    xsltemp.stylesheet = stylesheet.documentElement;
    var xslproc = xsltemp.createProcessor();
    xslproc.input = source;
    xslproc.addParameter("gpSelectedFolder", folderID, "");
    xslproc.transform();
    alert(xslproc.output);
  }
}
...
Рейтинг: 0 / 0
22.08.2019, 17:47
    #39852924
natjer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в HMTL отобразить 2 взаимосвязанных XML
Спасибо! Работает
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / как в HMTL отобразить 2 взаимосвязанных XML / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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