XML para o Microsoft Access - evite perder chaves

1

Eu quero importar um documento XML para o Microsoft Access 2010. Aqui está um exemplo do XML:

<ROWSET>   
    <BIOG>
      <BIOG_NBR>    10021616    </BIOG_NBR>
      <FIRST_NAME>  Marvin      </FIRST_NAME>
      <LAST_NAME>   Rumple      </LAST_NAME>
      <ADDRESS_LIST>
        <ADDRESS_TYP>
          <ORG1>        UNICEF      </ORG1>
          <ADDRESS_TYPE>Work        </ADDRESS_TYPE>
          <LINE_2>      23322 Bovine Blvd   </LINE_2>
          <US_ZIP>      770303411           </US_ZIP>
          <CONTACT_LIST/>   
        </ADDRESS_TYP>
        <ADDRESS_TYP>
          <ORG1>        MENSA   </ORG1>
          <ADDRESS_TYPE>Leisure </ADDRESS_TYPE>
          <LINE_2>      421 Porcine Lane    </LINE_2>
          <US_ZIP>      770303411           </US_ZIP>
          <CONTACT_LIST/>
        </ADDRESS_TYP>
      </ADDRESS_LIST>
    </BIOG>

Este é um documento XML bem formado. Ele tem um documento de definição DTD , mas eu removo a declaração porque a importação do Access não aceita isso. <ROWSET> é o elemento raiz. Meu exemplo é simplificado - oito tabelas são representadas no esquema.

Quando importo isso, recebo duas tabelas, BIOG e ADDRESS_TYP . Mas ADDRESS_TYP não mostra a chave estrangeira BIOG_NBR .

Comopossotrazerisso?Algumasmaneirasquemeocorrem:

  1. Useumeditordetextocomexpressõesregularesparainserir<BIOG_NBR>____</BIOG_NBR>imediatamenteapóscadainstânciade<ADDRESS_TYP>.Issoédeselegantee,comooarquivoéde200MB,podeserimpraticável.
  2. UseoutroanalisadorXMLparaexportartodososdadosparaarquivoscsv.Estaseriaminhaprimeiraopção,masestoucomlimitaçõesdetrabalhoqueaexcluem.
  3. UsealgumtipodetransformaçãocomoXSD.EuuseiessaabordagempararenderizaremHTML,maselaseaplicaaessatarefa?(Eentão,euaindanãoprecisodeumanalisadorXML?Obviamentesim...)
  4. UseabibliotecaMicrosoftXMLnoVBA.( isso se aplica?)

Em poucas palavras: Devo procurar uma ferramenta XML nativa, como na opção nº 3? Existe outra abordagem que está faltando?

    
por Smandoli 20.11.2014 / 21:16

1 resposta

0

É muito fácil.

PASSO 1 - faça uma importação dos dados usando a opção padrão "Importar XML" do Access. Apenas estrutura.

PASSO 2 - Vá a cada tabela e adicione um campo que levará a chave ausente.

PASSO 3 - Use o VBA. Adicione a biblioteca Microsoft XML, v6.0 . Até mesmo este pedaço de código me diz que será simples escrever a chave para cada tabela conforme necessário.

Dim oDoc As MSXML2.DOMDocument
Dim fSuccess As Boolean
Dim oRoot As MSXML2.IXMLDOMNode
Dim oSoftkey As MSXML2.IXMLDOMNode
Dim oAttributes As MSXML2.IXMLDOMNode

Set oDoc = New MSXML2.DOMDocument

oDoc.async = False
oDoc.validateOnParse = False

fSuccess = oDoc.Load(strPath & "\specimen.xml")

If Not fSuccess Then Exit Sub

' Get the root of the XML tree.
Set oRoot = oDoc.documentElement
For Each oSoftkey In oRoot.ChildNodes

  For Each oAttributes In oSoftkey.ChildNodes

      Debug.Print oAttributes.Text
  Next
Next oSoftkey
    
por 20.11.2014 / 21:52