Как из javascript изменить XML и заставить браузер заного его преобразовать по XSLT с

Andrey_f

Новичок
Как из javascript изменить XML и заставить браузер заного его преобразовать по XSLT с

Как из javascript изменить XML и заставить браузер заного его преобразовать по XSLT схеме

В общем отдаю браузеру xml

index.xml
Код:
<?xml version="1.0" encoding="windows-1251"?>
<?xml-stylesheet type='text/xsl' href='index.xsl'?>
<page>
    <projects>
        <part id="1" name="part1">
            <part id="3" name="part11">            
            </part>               
        </part>
        <part id="2" name="part2">
        </part>                       
    </projects>    
</page>
XSLT схема:

index.xsl
Код:
<?xml version="1.0" encoding="windows-1251"?><!DOCTYPE xsl:stylesheet  [
    <!ENTITY nbsp   "&#160;">
    <!ENTITY copy   "&#169;">
    <!ENTITY reg    "&#174;">
    <!ENTITY trade  "&#8482;">
    <!ENTITY mdash  "&#8212;">
    <!ENTITY ldquo  "&#8220;">
    <!ENTITY rdquo  "&#8221;"> 
    <!ENTITY pound  "&#163;">
    <!ENTITY yen    "&#165;">
    <!ENTITY euro   "&#8364;">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="windows-1251" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

<xsl:template match="page">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
<title>tree</title>
<link href="style.css" rel="stylesheet" type="text/css" />
<script>
    function get_xml()
    {                           
        node_list_projects=this.document.getElementsByTagName('projects');
                
        if (node_list_projects.length==1)
        {          
            part=document.createElement('part');            
            part.createAttribute('id','10');
            part.createAttribute('name','parttest');    
            node_list_projects.item(0).appendchild(part);                             
        }           
    }
</script>
</head>

<body>
    <xsl:apply-templates select="projects"/>                                         
</body>

</html>
</xsl:template>

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

<xsl:template match="part" mode="part">
  <ul>                                            
    <li onclick='get_xml();' ><xsl:value-of select="@name"/>__id_<xsl:value-of select="@id"/></li>
    <xsl:apply-templates mode="part" />
  </ul>
</xsl:template>                                                                          

</xsl:stylesheet>
Проблема в том что javascript работает уже с преобазованной схемой. А мне надо изменить базовый xml и чтоб браузер заного его преобразовал.

:confused:


p.s.
Пример кода указан ради теста, насамом деле он намного сложнее и добавляемый xml подгрузается через ajax
 

slach

Новичок
измени базовый XML на стороне сервера

либо делай клиентскую XSLT трансформацию не средствами XML а средствами JS

т.е.
сначала грузим HTML+JS
который подгружает
XML
меняет его
трансформирует
и через innerHTML вставляет результат трансформации куда тебе надо
 

Andrey_f

Новичок
Автор оригинала: slach
измени базовый XML на стороне сервера
я писал что насамом деле там всенамного сложнее и нет никакого базового xml на стороне сервера, xml генерируется при запросе, а через ajax подгружаются кусочки xml.

Автор оригинала: slach
либо делай клиентскую XSLT трансформацию не средствами XML а средствами JS

т.е.
сначала грузим HTML+JS
который подгружает
XML
меняет его
трансформирует
и через innerHTML вставляет результат трансформации куда тебе надо
Поначалу так и думал делать, но думал что возможно с меньшим гемороем через браузерное преобразование xslt
 

slach

Новичок
ну в XSLT
можешь попробовать вызвать XPath ф-цию
document()
чтобы подгрузить свой дополнительный ajax

но это только внутри XSLT действует

главное что тебе надо понять
1) JavaScript выполняется уже ПОСЛЕ XSLT преобразования
2) JS НИЧЕГО не знает о структуре исходного XML и XSLT

у MSXML правда был вроде тег xsl:script
но я не смогу точно сказать сейчас уже можно или нельзя его пользовать в задаче
 

Andrey_f

Новичок
Автор оригинала: slach

главное что тебе надо понять
1) JavaScript выполняется уже ПОСЛЕ XSLT преобразования
2) JS НИЧЕГО не знает о структуре исходного XML и XSLT
Спасибо, с этим я и хотел определиться
 

dark-demon

d(^-^)b
slach, в опере document не работает

Andrey_f, ничего там в xslt через яваскрипт сложного нет. грузишь две xml-ки и натравливаешь одну на другую одним из двух способов в зависимости от браузера.
 
Сверху