Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SerraVentura

[Resolvido] XML DOM

Recommended Posts

Seguinte galera,

 

vcs podem reparar que a linha em negrito esta estatica, preciso torna-la dinamica...

tenho uma arvore tipo o windows explorer, no momento q o usuario clica em um no, meu asp precisa identificar esse nó e capturar apenas ele...

 

meu problema é montar esse caminho, pois tenho q detectar o id de cada no... não sei como fazer...

 

segue as partes importantes do codigo...

 

vlw!

 

ASP
call Captura_No("../xml/arvore_template.xml", "../xml/form_campo.xsl", nId, sNivel)

 

Public Function Captura_No(xml, xsl, id, Nivel)

        Dim oXml : Set oXml = Server.CreateObject("MSXML2.DOMDocument")

        Dim oXsl : Set oXSl = Server.CreateObject("MSXML2.DOMDocument")

 

        oXml.load(Server.MapPath(xml))

        oXsl.load(Server.MapPath(xsl))

 

        Set oNo = oXml.SelectSingleNode("/templates/template[@id=02]/grupo[@id=02]/linha[@id=02]/campo[@id=02]")

 

        Response.Write oNo.transformNode (oXsl)

       

        Set oXml = Nothing

        Set oXsl = Nothing

End Function

 

 

Set oNo = oXml.SelectSingleNode("/templates/template[@id=02]/grupo[@id=02]/linha[@id=02]/campo[@id=02]")

 

 

<templates>	<template id="01" nome="T1">		<grupo id="01" nome="G1">			<linha id="01" nome="L1">				<campo id="01" nome="C1"></campo>			</linha>		</grupo>	</template>	<template id="02" nome="T2">		<grupo id="02" nome="G2">			<linha id="02" nome="L2">				<campo id="01" nome="C1"></campo>				<campo id="02" nome="C2"></campo>				<campo id="03" nome="C3"></campo>			</linha>		</grupo>	</template></templates>

Compartilhar este post


Link para o post
Compartilhar em outros sites

se entendi bem, você vai ter que montar isso durante a montagem do link, passando o ID de cada nó para o link, quando clicar no link(item da árvore) faz a requisição do nó pelo ID

Compartilhar este post


Link para o post
Compartilhar em outros sites

deixa tentar explicar melhor...

 

existe o XML q postei acima...

onde existe um XSL...

 

exemplo...

<!-- CAMPO -->						<xsl:for-each select="campo">							<div class="noNv3" style="display:none;">							<xsl:attribute name="id">								<xsl:text>lblcampo</xsl:text><xsl:value-of select="@id"/>							</xsl:attribute>								<span id="lblcp" class="lblno" onmouseover="ExibeSelecao(this);" onmouseout="RetiraSelecao(this);" >									<xsl:attribute name="onclick">										<xsl:text>seleciona(this,'nvl4', '</xsl:text><xsl:value-of select="@id"/><xsl:text>', '</xsl:text><xsl:value-of select="@nome"/><xsl:text>');</xsl:text>									</xsl:attribute>									<xsl:value-of select="@nome"/>								</span>							</div>						</xsl:for-each>

 

atraves do XSL, quando o cara clica em um Nó ele chega ate uma função javascript...

 

function seleciona(obj, nvl, id, nome){			obj.className = 'lblnoMarca';			abreno(nvl, id);			Ajax("/Sistema/execucao/teste.asp?sAcao=CN&Nivel="+nvl+"&id="+id, "", "conteudo", true, true, "get");		}

essa função dispara um Ajax, onde chama a pagina q contem o trecho de codigo ASP q já postei...

 

entaum o objetivo do ASP é identificar o NÓ selecionado através de todos os NÓS q ele ja passou... e capturar apenas parte do XML no caso <campo>, onde nesse passo eu monta com um outro XSL um formulario com esse nó...

 

o grande problema é q pra eu chegar nesse NÓ...

 

eu preciso capturar o ID de cada Nó clicado senaum nuam tenho como chegar no alvo...

fiz um teste com esse caminho estaticamente e funcionou perfeitamente, porém ele precisa ser dinamico, pois em cada nó clicado será aberto um formulario diferente...

 

vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí Vizinho,

 

Dado que notei que você deve ter acesso ao XML origem de sua árvore no servidor e, pelo que também notei, este xml não é gerado dinamicamente e sim é um arquivo estático. Recomendaria que ao invés do nId passado como penúltimo argumento na assinatura de sua função captura_no você passasse o path gerado via script dentro do seu XSL!

 

Complicado? Nem tanto quanto parece!

 

Hoje, em seu XSL, voce deve ter um evento onclick que efetivamente, captura o id do nó selecionado e o repassa para uma função de detalhamento que em ultima instancia deve acabar sendo passada o servidor onde é acionada a função Captura_no. Acredito que voas esteja fazendo isso via Ájax. Esta função, ao invés de passar este id deve construir o path do nó dinamicamente.

 

Como aparentemente, sua estrutura XML tem o id estaticamente definido como atributo chave para a identificação de cada nó, é fácil se implementar uma função que varra recursivamente os nós em direção à raiz capturando os IDs e construindo o Path que voce necessita à medida que vai navegando.

 

Esclarecida a teoria, vamos por a mão na massa:

 

Segue abaixo um XSL que em cada nó cria uma chamada a uma função de script que constrói o path desejado.

 

<?xml version="1.0" encoding="encoding=iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
 <xsl:template match="/">
  [url="http://december.com/html/4/element/html.html"]<html>[/url]
   [url="http://december.com/html/4/element/head.html"]<head>[/url]
    [url="http://december.com/html/4/element/style.html"]<style>[/url]div{padding-left: 8pt}</style>
    [url="http://december.com/html/4/element/script.html"]<script>[/url]<![CDATA[
     function buildPath(obj)
      {
      event.cancelBubble=true
      
      if  (obj.parentElement)
       if (obj.parentElement.name != 'root')
        return (buildPath(obj.parentElement) + ('/' + obj.name + '[id='' + obj.id + '']'))
       else
        return ('/' + obj.name + '[id='' + obj.id + '']')
 
      }
 
     function doBuildPath(obj)
      {
 
      alert(buildPath(obj))
      
      }
     ]]>
    </script>
   </head>
   [url="http://december.com/html/4/element/body.html"]<body>[/url]
    [url="http://december.com/html/4/element/div.html"]<div[/url] name="root" style="border: 1px solid navy">
     <xsl:for-each select="templates/template">
      [url="http://december.com/html/4/element/div.html"]<div[/url] name="template" onclick="doBuildPath(this)">
       <xsl:attribute name="id">
        <xsl:value-of select="@id"/>
       </xsl:attribute>
       <xsl:value-of select="@nome"/>
       <xsl:for-each select="grupo">
        [url="http://december.com/html/4/element/div.html"]<div[/url] name="grupo" onclick="doBuildPath(this)">
         <xsl:attribute name="id">
          <xsl:value-of select="@id"/>
         </xsl:attribute>
         <xsl:value-of select="@nome"/>
         <xsl:for-each select="linha">
          [url="http://december.com/html/4/element/div.html"]<div[/url] name="linha" onclick="doBuildPath(this)">
           <xsl:attribute name="id">
            <xsl:value-of select="@id"/>
           </xsl:attribute>
           <xsl:value-of select="@nome"/>
           <xsl:for-each select="campo">
            [url="http://december.com/html/4/element/div.html"]<div[/url] name="campo" onclick="doBuildPath(this)">
             <xsl:attribute name="id">
              <xsl:value-of select="@id"/>
             </xsl:attribute>
 
             <xsl:value-of select="@nome"/>
            </div>
           </xsl:for-each>
          </div>
         </xsl:for-each>
        </div>
       </xsl:for-each>
      </div>
     </xsl:for-each>
    </div>
   </body>
  </html>
 </xsl:template>
</xsl:stylesheet>

 

[]tz ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para explicar a brincadeira, o SerraVentura trabalha comigo.

Os créditos da ajuda nem são meus, são de outro companheiro nosso de trabalho... Nilson Gomes.

 

[]tz ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.