Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как передать параметр в функцию 
:(
    Опции темы
Yashustik
Дата 8.8.2007, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 29.5.2007

Репутация: нет
Всего: нет



У меня вот какая проблема: 
Есть XML-файл вида 

Код:

Код


<row> 
 <row_element column="8" component_tag="92958" property_name="Z_DateOutput_d">02-Июл-2007 10:23</row_element> 
 <row_element column="12" component_tag="92958" property_name="Z_Kod_Pr">167;</row_element> 
</row> 
<row> 
  <row_element column="8" component_tag="92970" property_name="Z_DateOutput_d">06-Июн-2007 08:36</row_element> 
  <row_element column="12" component_tag="92970" property_name="Z_Kod_Pr">247;182;</row_element> 
</row> 





Необходимо в <row_element> заменить значение Z_Kod_Pr на другое согласно таблице 
Я написала функцию, задача которой найти значение в одном массиве и заменить его на соответствующее значение из другого массива, на вход функции должен прийти один код, коды в Z_Kod_Pr разделяются через ";",т.е если их несколько вызвать фукцию надо несколько раз: 

Код:


Код

function replace(var ID) 
 { 
var Kod=new Array ("0","00","01") 
var ID_Kod=new Array ("167","182","247") 

for (var i = 0, i &lt;ID_Kod.length, i++) 
     { 
         if (ID_Kod[i] == ID) 
          { 
         document.write(Kod[i]) 
         return Kod[i] 
           } 
       return "Невозможно найти " + ID + "." 
                  
      }        
} 




Вопрос, как вызвать эту функцию несколько раз и как передать туда значение Z_Kod_Pr 
Я попробовала вот так и получалась полная ерунда. 

Код:

Код


<xsl:template match="row_element"> 
<xsl:choose> 
</xsl:when> 
  <xsl:when test="@property_name='Z_Kod_Pr'"> 
  <td align="center"> 
      <script type="text/javascript"> 
      replace(<xsl:value-of select="substring-before(.,';' )"/>) 
      </script> 
 </td> 
</xsl:when> 
</xsl:choose> 
</xsl:template> 



Помогите сделать правильно 
PM MAIL   Вверх
Golda
Дата 10.8.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 3
Всего: 42



Yashustik, что-то у Вас все перепуталось: XML, XSL, javascript.

Если собираетесь использовать javascript, значит подразумеваете, что конечный документ будет в формате  HTML, в контексте которого броузер будет распознавать и выполнять javascript. Как сделать Ваш код с вызовом javascript-функции работоспособным, сказать в данный момент нельзя, поскольку Вы не указали, к какому HTML Вы хотите преобразовать этот XML. Уточните - поможем.

Но на самом деле я вообще не вижу причин использовать для этого javascript. Если все равно будет выполняться преобразование с использованием XSL, почему бы и это не сделать с помощью XSL?

Например, если вся задача сводится к этому изменению, можно создать вспомогательный xml c таблицей замен (если нельзя напрямую трогать основной) и работать с ним.

test.xml
Код

<?xml version='1.0'?>
<root>
<row>
    <row_element column="8" component_tag="92958" property_name="Z_DateOutput_d">02-06-2007 10:23</row_element> 
    <row_element column="12" component_tag="92958" property_name="Z_Kod_Pr">167;</row_element> 
</row> 
<row>
    <row_element column="8" component_tag="92970" property_name="Z_DateOutput_d">06-06-2007 08:36</row_element> 
    <row_element column="12" component_tag="92970" property_name="Z_Kod_Pr">247;182;</row_element> 
</row> 
</root>


test2.xml (таблица замен)
Код

<?xml version='1.0'?>
<dictionary>
    <item old="167" new="195"/> 
    <item old="247" new="238"/> 
    <item old="182" new="239"/> 
</dictionary>


test.xsl
Код

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:variable name="DICTIONARY" select="document('test2.xml')/dictionary"/>

<xsl:template match="@*|*">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="/">
     <xsl:apply-templates/>
</xsl:template>

    
<xsl:template match="row_element[@property_name='Z_Kod_Pr']">
    <xsl:variable name="val" select="."/>
    <row_element>
        <xsl:apply-templates select="@*"/>
        <xsl:call-template name="replace">
            <xsl:with-param name="source" select="$val"/>
        </xsl:call-template>
    </row_element>
</xsl:template>

<xsl:template name="replace">
    <xsl:param name="source"/>
    
    <xsl:if test="$source != ''">
        <xsl:value-of select="$DICTIONARY/item[@old = substring-before($source, ';')]/@new"/>;
        <xsl:call-template name="replace">
            <xsl:with-param name="source" select="substring-after($source, ';')"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>
</xsl:stylesheet>



--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0469 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.