Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   XML (http://www.flasher.ru/forum/forumdisplay.php?f=23)
-   -   Связывание строки HTML- и Xml- таблиц (http://www.flasher.ru/forum/showthread.php?t=31764)

LaGor 18.05.2002 10:22

Связывание строки HTML- и Xml- таблиц
 
Есть таблица данных. Структура на Xml представлены HTML.
Мышкой выбираю строку нужно узнать, что находиться внутри ячеек.
Вообще это не обязательно с помощью Xml, может кто знает другие способы? Я пришёл к выводу, что у меня никак не получиться кроме как с помощью Xml, правда у меня и так не особо получается ... :(

Stellerex 18.05.2002 12:43

Бред какой-то. Шел бы ты, молодой человек, в раздел DHTML, - xml тебе не нужен, да и работать то, что ты хочешь будет только под IE.

LaGor 18.05.2002 13:21

Ну, во-первых, то что это будет только под IE, меня вполне устраивает.
Во-вторых, согласен я слабо знаю xml (недавно за него взялся), тогда тем более я нуждаюсь в совете. Поэтому ответ "... бред какой-то ... шёл бы ты ... (хоть и признателен что указали конечный пункт) ..." является по меньше мере не уважительным.
В-третьих, объясниле бы тогда почему с помощью xml это сделать нельзя.

Согласен может не понятно задал вопрос, перефразирую.
Есть набор данных табличного типа. С помощью Xml структуированых. Потом связываю Xml данные с HTML-элементом Table. Получается HTML таблица с данными. Как передвигать курсор объекта recordset DSO знаю. Но как связать строку в HTML таблице со строкой данных Xml в recordset'е (нужно же знать на сколько передвинуть курсор у объекта recordset), чтобы вынуть значения, я не знаю.
И просьба не надо отвечать "отписками" не имеющих конструктивных подсказок.

Stellerex 18.05.2002 13:49

Ок, попробую ответить конструктивно.
Предположим, есть у тебя xml следующего вида:
Код:

<?xml version="1.0" encoding="UTF-8"?>
<tableinfo>
<row id="1">
<column>1</column>
<column>2</column>
<column>3</column>
</row>
<row id="2">
<column>4</column>
<column>5</column>
<column>6</column>
</row>
</tableinfo>

, описывающий твои данные в табличной форме. Предположим, что ты сделал xsl'ку, выполняющую трансформацию этого xml'я в html:

Код:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="tableinfo">
<script language="javascript">
function doRowClick(row_id) {
  alert('row with id=' + row_id + ' clicked');
}
</script>

<table>
<html>
<head>
<title>Sumthin' blablabla<title>
</head>
<body>
<xsl:apply-templates select="row"/>
</table>
</body>
</html>
</xsl:template>

<xsl:template match="row">
<tr rowid="{@id}" onclick="doRowClick('{@id}')">
<xsl:apply-templates select="row"/>
<tr>
</xsl:template>

<xsl:template match="column">
<td><xsl:value-of select="."><td>
</xsl:template>

</xsl:stylesheet>

Собственно, все. После этого, при тычке на любую строку в таблице вызывается джаббаскриптовая функа doRowClick() с параметром - идентификатором строки. Опосля этого через document DOM обращайся к любому элементу этой строки.

Насчет "Бред какой-то" могу пояснить буквально следующее. Твою постановку задачи я прочитал четыре(4) раза и не понял, что конкретно тебе надо. Такое, согласись, бывает не часто :)

П.С. Приведенный код, скорее всего, без напильника работать не будет - не проверял.

Stellerex 18.05.2002 13:54

Ну да, одну багу уже видать невооруженным глазом:
в темплейте row
Код:

<xsl:apply-templates select="row"/>
надо заменить на
Код:

<xsl:apply-templates select="column"/>
:)

LaGor 18.05.2002 15:17

Stellerex я действительно плохо знаю xml (точнее сказать я его практически и не знаю). Поэтому у меня возникли некоторые трудности. Я сделал эти два файла, вроде все ошибки исправил, но как из них получить конечный html файл? (может это и покажется смешно). Просто у тебя как-то всё наоборот сделано. Я обычно делал html файл в нём подключал xml, а в xml указывал на xsl, т.е. в конечном счёте получался html. Видишь дело в чём мне надо получить один html файл в конечном итоге. (поясню: у меня на сервере обрабатываются данные, формируется html-документ и отправляется клиенту от которого был запрос)
Может проще будет если я напишу как делал, а ты посмотришь и подскажешь?
Пусть xml будет встроен в html.

Код:

<HTML>
<Head><Title>Тест</Title></Head>
<body>
<xml id="dsoTableData">
  <?xml version="1.0"?>
  <TableData>
    <row> 
      <fld1>1.1</fld1>
      <fld2>1.2</fld2>
      <fld3>1.3</fld3>
    </row>
    <row> 
      <fld1>2.1</fld1>
      <fld2>2.2</fld2>
      <fld3>2.3</fld3>
    </row>
    <row> 
      <fld1>3.1</fld1>
      <fld2>3.2</fld2>
      <fld3>3.3</fld3>
    </row>
  </TableData>
</xml>
<table datasrc="#dsoTableData" border="1">
<tr>
    <td><span datafld="fld1"></span></td>
    <td><span datafld="fld2"></span></td>
    <td><span datafld="fld3"></span></td>
</tr>
</table>
</body>
</HTML>

Получается что в элементе table определена тока одна строка, когда браузер отображает таблицу, он повторяет строковые элементы для каждой записи в Xml.
Ну дак вот вопрос в таком случае я не могу проиндефецировать каждые элемент tr (пронумеровать их по порядку), иначе можно было бы передвинуть курсор объекта recordset на нужный бы номер Xml данных по типу
dsoTableData.recordset.move([индекс строки]) ...

Прошу прощения, как-то сумбурно получилось, но может всё таки более понятно чем в предыдущие разы.

Stellerex 18.05.2002 15:42

На мой взгляд, ты излишне усложняешь жизнь - если не требуется жуткого интерактива на странице, без ее перезагрузки, выполнять трансформацию xml -> html через xslt лучше всего на сервере. Клиенту в этом случае приходит чистый html-код, скрывающий реализацию. Пример на c#:
Код:

protected String getXMLTransformResult() {
        XmlDocument doc = new XmlDocument();
        XmlDocument result = new XmlDocument();
        XmlNode node = result.AppendChild(result.CreateElement("root"));

        XmlDocument stylesheet = new XmlDocument();
        XslTransform transform = new XslTransform();

        XsltArgumentList arguments = new XsltArgumentList();
        fillXsltArgumentList(ref arguments);

        doc.Load(Server.MapPath(@"data/properties.xml"));
        stylesheet.Load(Server.MapPath(@"data/properties.xsl"));
        transform.Load(stylesheet);

        XmlReader reader = transform.Transform(doc, arguments);
        for (reader.Read(); !reader.EOF; )
                node.AppendChild(result.ImportNode(doc.ReadNode(reader), true));
        reader.Close();

        return node.InnerXml;
}

Аналогично делается на java, php етс.
Естественно, xml не обязательно грузить с диска :)
Если же ты маньяк и все трансформации позарез надо делать на клиенте, вот пример из MSDN:

Код:

<SCRIPT LANGUAGE="JScript">

  var oMenuXml = new ActiveXObject("Microsoft.XMLDOM");
  oMenuXml.async = false;
  oMenuXml.load("webdev.xml");

  var oMenuXsl = new ActiveXObject("Microsoft.XMLDOM");
  oMenuXsl.async = false;
  oMenuXsl.load("menus_1.xsl");

</SCRIPT>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JScript">

  document.write(oMenuXml.transformNode(oMenuXsl.documentElement));

</SCRIPT>


LaGor 20.05.2002 16:53

Мне и надо чтобы всё происходило на сервере, а клиенту посылался Html-файл (таблица с данными). А когда он выбирает строку у таблицы, данные из этой строки дальше обрабатываются в другой страничке (т.е. передаются).
Честно говоря,я не совсем понял что ты тут написал. :(
Извини. Просто С## я не знаю, а xml плохо (что почти аналогично). Не мог бы ты объяснить поподробнее?
Ещё раз извини, если напрягаю.

Stellerex 20.05.2002 19:26

Ну тогда поступим так - напиши подробнее, откуда берешь данные и на чем пишешь серверную часть - может подмогну исходником. Можно по аське :)

LaGor 21.05.2002 08:25

Хорошо, давай по асе, а потом сюда выложим исходник, вдруг кому понадобиться.


Часовой пояс GMT +4, время: 09:57.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.