1

Я хочу импортировать XML-документ в Microsoft Access 2010. Вот пример из 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>

Это правильно оформленный документ XML. У него есть документ определения DTD , но я удаляю объявление, потому что импорт Access не примет его. <ROWSET> является корневым элементом. Мой пример упрощен - восемь схем представлены в схеме.

Когда я импортирую это, я получаю две таблицы, BIOG и ADDRESS_TYP . Но ADDRESS_TYP не показывает внешний ключ BIOG_NBR .

Как я могу внести это? Некоторые способы, которые происходят со мной:

  1. Используйте текстовый редактор с регулярными выражениями для вставки <BIOG_NBR>____</BIOG_NBR> сразу после каждого экземпляра <ADDRESS_TYP> . Это не элегантно, и, поскольку размер файла составляет 200 МБ, это может быть нецелесообразно.
  2. Используйте другой анализатор XML для экспорта всех данных в CSV-файлы. Это будет мой первый вариант, но я нахожусь под рабочими ограничениями, которые исключают его.
  3. Используйте какое-то преобразование, например XSD . Я использовал этот подход для рендеринга в HTML, но относится ли он к этой задаче? (И потом, разве мне не нужен анализатор XML? Очевидно, да ...)
  4. Используйте библиотеку Microsoft XML в VBA. (Это относится?)

В двух словах: Должен ли я обратиться к собственному инструменту XML, как в варианте № 3?Есть ли другой подход, который я пропускаю?

1 ответ1

0

Это слишком просто.

ШАГ 1 - выполнить импорт данных, используя стандартную опцию Access "Import XML". Только структура

ШАГ 2 - Перейдите к каждой таблице и добавьте поле, в котором будет отсутствующий ключ.

ШАГ 3 - Используйте VBA. Добавьте библиотеку Microsoft XML, v6.0 . Даже этот лишний фрагмент кода говорит мне, что будет просто написать ключ к каждой таблице по мере необходимости.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .