none
Microsoft.XMLDOM - Verificando se atributo existe ? RRS feed

  • Pergunta

  • Olá a todos,

    Estou utilizando o asp para gerar a visualização de uma listagem com origem em um arquivo xml.

    Estou com duas dúvidas.

    1 - Como fazer um loop nos atributos de um elemento?
    2 - Como verificar de aquele atributo existe para aquele elemente específico?

    considerem esse xml como o xml de origem:

    <?xml version="1.0" encoding="utf-8"?>
    <menu regiao="2">
    <item text="Acessórios e Produtos">
        <item text="de A a H">
          <item text="Acessórios em Geral" grupo_codigo="1" categoria_codigo="7"/>
          <item text="Alambrados/Telas" grupo_codigo="1" categoria_codigo="7"/>
        </item>
        <item text="de I a Q">
          <item text="Insulfilm / Películas" grupo_codigo="1" categoria_codigo="7"/>
          <item text="Jardins / Móveis" grupo_codigo="1" categoria_codigo="7"/>
          <item text="Lavadoras de Alta Pressão" grupo_codigo="1" categoria_codigo="7"/>
        </item>
        <item text="de R a Z">
              <item text="Rádio Comunicação" grupo_codigo="1" categoria_codigo="7"/>
        </item>
      </item>
      <item text="Alarmes e Segurança">
        <item text="Blindagem de Guaritas" grupo_codigo="1" categoria_codigo="7"/>
        <item text="Cercas Elétricas" grupo_codigo="1" categoria_codigo="7"/>
      </item>
    </menu>


    Bom ano novo a todos!
    segunda-feira, 7 de janeiro de 2008 17:42

Todas as Respostas

  • Olá Lazaro, não trabalho muito com XML mas acho que este exemplo já pode te ajudar:

    Code Snippet

    <?xml version="1.0" encoding="utf-8"?>
    <menu regiao="3">


      <itens text="Acessorios e Produtos">
        <grupo text="de A a H">
          <item text="Acessorios em Geral" grupo_codigo="1" categoria_codigo="7"/>
          <item text="Alambrados/Telas" grupo_codigo="1" categoria_codigo="7"/>
        </grupo>
        <grupo text="de I a Q">
          <item text="Insulfilm / Peliculas" grupo_codigo="1" categoria_codigo="7"/>
          <item text="Jardins / Moveis" grupo_codigo="1" categoria_codigo="7"/>
          <item text="Lavadoras de Alta Pressao" grupo_codigo="1" categoria_codigo="7"/>
        </grupo>
        <grupo text="de R a Z">
          <item text="Radio Comunicacao" grupo_codigo="1" categoria_codigo="7"/>
        </grupo>
      </itens>

      <itens text="Alarmes e Seguranca">
        <item text="Blindagem de Guaritas" grupo_codigo="1" categoria_codigo="7"/>
        <item text="Cercas Eletricas" grupo_codigo="1" categoria_codigo="7"/>
      </itens>
     
    </menu>



    Code Snippet

    Set objXML = Server.CreateObject("Microsoft.XMLDOM")
    objXML.setProperty "ServerHTTPRequest", True
    objXML.async = False

    objXML.Load(server.MapPath("teste.xml"))

    set rootElement = objXML.documentElement

    qtdElementos = rootElement.childNodes.length

    for i = 0 to qtdElementos-1
      qtdAtributos = rootElement.childNodes(i).attributes.length
      for x = 0 to qtdAtributos-1
        response.Write("Atributo: <b>" & rootElement.childNodes(i).attributes(x).name & "</b> - Valor: <b>" & rootElement.childNodes(i).attributes(x).text & "</b><br>")
      next
    next


    O loop nos atributos você pode fazer simplesmente pegando a quantidade de atributos que o elemento possui e trabalhando neles, que neste caso eu simplesmente imprimi na tela o nome do atributo e em seguida seu valor.
    E se esse elemento possui mais elementos dentro dele, você pode acionar outro loop e percorrer os elementos internos do mesmo jeito, só acrescentando mais um "childNodes".

    Como fazer para saber se um elemento possui um certo atributo de seu interesse?
    Com o exemplo acima você já possui uma maneira de pegar o nome do atributo, basta comparar, dentro do loop, para ver se ele possui o atributo desejado, não sei se é a melhor forma, mas funciona.

    []'s
    quarta-feira, 23 de janeiro de 2008 18:38
  • Eu faço desta forma, estou enviando parte do código só pra você ter idéia, é quase a mesma coisa do que foi comentado acima.

     

    Code Snippet

    for each x in xmlDoc.documentElement.childNodes

         if x.ChildNodes.length > 0 then

    registro = xmlDoc.getElementsByTagName(x.nodename).item(0).ChildNodes.item(0).nodename

    set registro = xmlDoc.getElementsByTagName(registro)

              Response.write(registro.length)

                   for each z in registro

                        Set objattr = z.attributes

                        contattr = z.attributes.length

                        for each attr in objattr

                             if x.nodename = "Animais" and contattr > 0 then

                             if attr.name = "EId" then var_eid = attr.value end if

                             if attr.name = "VisualId" then var_visualid = attr.value end if

     

     

     

     

    Abraços

     

    Estevam

    quarta-feira, 23 de janeiro de 2008 19:03