Jump to content
Fórum Script Brasil
  • 0

Localizando tags XML


Dayana Boni

Question

Oi pessoal,

Eu tenho um arquivo XML com várias tags e níveis hierárquicos. Por programação, eu preciso verificar se há a existência de determinadas tags no XML passado, para decidir então o que o sistema irá fazer.

Tentando localizar a tag "REG", em VB fiz:

...

Dim nCT1Nivel As Integer

Set objNodes = objXMLDOM.selectNodes("Language/APOLICE/TB_APO/REG")

...

Mas não encontra.

Mesmo eu colocando apenas ...("Language/APOLICE/TB_APO/REG") quanto ...("Language/APOLICE/TB_APO/REG ID").

Edited by Dayana Boni
Link to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 0

Ta (:

Olha Leo:

Até onde entendi os códigos que fizeram, é usado um objeto FileSystemObject para acessar/ler as informações de dentro do XML.

O trecho que é responsável por receber o número de tags XML é:

Teste = LerInterno("Apolice", 0)

Como mostra, ela chama a função LerXML:

Function LerInterno(Opcao As String, Indice As Integer)

Dim NodeValue

Dim objNodes As IXMLDOMNodeList

Dim IndiceLocal As Integer

LerNoInterno = -1

Case "Apolices"

Set objNodes = objXMLDOM.selectNodes("Apolices/Apolice")

LerInterno = objNodes.length

Case "Parcelas"

Set objNodes = objXMLDOM.selectNodes("Apolices/Apolice").Item(Indice).selectNodes("Parcelas/Parcela")

LerInterno = objNodes.length

End Select

Exit Function

End Function

Alguns pontos:

- No caso, eu estou passando "Apolice" como parâmetro para a função. Esta tag existe no meu XML, porém ela contém atributos. Não sei se isso está fazendo com que ela não seja localizada;

- Se no primeiro Case eu trocar o techo "Set objNodes = objXMLDOM.selectNodes("Apolices/Apolice")" apenas para "Set objNodes = objXMLDOM.selectNodes("Apolices")" me é retornado um erro. Se mantenho como está, ele apenas não aponta haver apólices.

P.S.: Não coloquei os códigos no CODEBOX porque está dando erro.

Edited by Dayana Boni
Link to comment
Share on other sites

  • 0

Tá.

O arquivo XML é deveras grande. Vou colocar aqui apenas o que interessa:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<Apolices id_solicitacao="6" data_inicial="01/09/2011" data_final="13/09/2011" dt_processamento="14/09/2011 01:14:45" tempo="00:00:03" VersaoPrograma="4.0.14">

<Apolice ID="1" nr_apolice="3" cd_ramo=55252" nr_endosso_apo="0" cd_origem="6">

<cd_filial>059663</cd_filial>

<cd_grupo_ramo>05</cd_grupo_ramo>

<cd_ramo>31</cd_ramo>

<nr_apolice>3547532</nr_apolice>

<nr_endosso>0</nr_endosso>

<Parcelas total="6">

<Parcela ID="1">

<cd_filial>4113</cd_filial>

<cd_grupo_ramo>85855</cd_grupo_ramo>

</Parcelas>

</Apolice>

</Apolices>

Link to comment
Share on other sites

  • 0

OK, quer contar então a quantidade de tags Apolice dentro de ApoliceS.

Set objNodes = objXMLDOM.selectSingleNode("Apolices")
Dim Quantidade As Integer

Quantidade = objNodes.childNodes.length
Ou manualmente:
Set objNodes = objXMLDOM.selectSingleNode("Apolices")
Dim Quantidade As Integer

For Each noFilho in objNodes.childNodes

  If noFilho.nodeName = "Apolice" Then Quantidade += 1

Next

estou enferrujadaço de VB6 (provavelmente alguma coisa na sintaxe ai tá errada), mas dá uma tentada :)

Link to comment
Share on other sites

  • 0

Aaaa Leo

Sou uma topera :(

No VB6 eu teria que fazer manualmente, como a segunda opção que você colocou, mas tem uma coisa que está enroscando:

Não existe a propriedade childNodes, como você colocou "objNodes.childNodes" no For Each. As propriedades existentes para o objNodes, são:

item

lengtk

nextNode

reset

Testei com as três primeiras e não deu :(

Link to comment
Share on other sites

  • 0

Acho que você teria que fazer algo diferente então. Vou te passar a idéia e alguns objetos (realmente não lembro muita a sintaxe de VB6, sorry) e acho que com base nisso você vai conseguir manipular esses dados:

'Objeto do arquivo XML
Dim docXML As New DOMDocument
Dim objNodes As IXMLDOMNodeList

docXML.Load(caminhoDoSeuArquivoXML)

Case "Apolices"
   
    Set objNodes = docXML.getElementsByTagName("Apolices")
    LerInterno = objNodes.length

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652.1k
×
×
  • Create New...