Обработка проблем форматирования VBA XML - Microsoft XML6.0 - PullRequest
0 голосов
/ 10 марта 2020

Я хотел бы добавить 3 POI (Point Of Interest) автоматически к каждой песне, которой я владею, в виртуальном диджейском программном обеспечении (цель - запустить соответствующее световое шоу в другом программном обеспечении). Чтобы добавить 3 POI, я решил, что нужно отредактировать базу данных. xml. Я сделал макрос VBA для редактирования файла, добавив теги, но как только я запускаю Virtual DJ, он сообщает, что база данных повреждена и хочет восстановить ее, тогда все добавленные мной строки теряются. То, что я добавляю, на 100% правильно (я дублирую POI, сгенерированный Virtual DJ). Фактически, только открытие и закрытие базы данных. xml с кодом VBA генерирует всплывающее сообщение об ошибке (см. Пример ниже, необходимо включить библиотеку «microsoft XML 6.0»)

    Sub TEST_ERROR()
    Set oXMLDoc = New MSXML2.DOMDocument60
    oXMLDoc.LoadXML "M:\VirtualDJ\Database.xml"
    oXMLDoc.Save "M:\VirtualDJ\Database.xml"
    End Sub

Я пытался редактировать вручную с помощью Atom, и это работает. (Это не жизнеспособное решение, так как мне приходится иметь дело с несколькими сотнями песен). Я подозреваю, что возможны 2 root -каанса: - Форматирование при использовании VBA для сохранения файла? - Проверка размера базы данных, когда VirtualDJ открыт?

Мои знания по обработке XML очень просты c. Я отчаянно нуждаюсь в том, чтобы найти кого-то готового проверить это. Я искал во многих XML темах решение и не смог его найти.

Вот пример того, как выглядит база данных. xml выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<VirtualDJ_Database Version="8.4">
 <Song FilePath="C:\Users\jeremie.havel\Downloads\21 Susan Singer - Bobby&apos;s Lovin&apos; Touch.mp3" FileSize="1667629">
  <Tags Author="Susan Singer" Title="21 Bobby&apos;s Lovin&apos; Touch" Bpm="2.857143" Flag="1" />
  <Infos SongLength="104.071837" FirstSeen="1583844159" Bitrate="128" Cover="2" />
  <Scan Version="801" Bpm="0.525669" AltBpm="0.703628" Volume="0.464210" Key="Bm" Flag="32768" />
  <Poi Pos="0.586304" Type="automix" Point="realStart" />
  <Poi Pos="0.600000" Type="automix" Point="fadeStart" />
  <Poi Pos="3.942290" Type="beatgrid" />
  <Poi Pos="95.450000" Type="automix" Point="fadeEnd" />
  <Poi Pos="98.808163" Type="automix" Point="realEnd" />
  <Poi Name="My custom POI" Pos="0.586304" Num="1" Type="cue" />
  <Poi Name="My custom POI 2" Pos="0.586304" Num="2" Type="cue" />
 </Song>
 <Song FilePath="C:\Users\jeremie.havel\Downloads\21 Elvis presley - You&apos;re The Boss.mp3" FileSize="2685767">
  <Tags Author="Elvis presley" Title="21 You&apos;re The Boss" Bpm="2.857143" Flag="1" />
  <Infos SongLength="167.706122" FirstSeen="1583844214" Bitrate="128" Cover="2" />
  <Scan Version="801" Bpm="0.541224" AltBpm="0.723401" Volume="0.540651" Key="F" Flag="32768" />
  <Poi Pos="0.158231" Type="beatgrid" />
  <Poi Pos="0.548571" Type="automix" Point="realStart" />
  <Poi Pos="1.100000" Type="automix" Point="fadeStart" />
  <Poi Pos="160.650000" Type="automix" Point="fadeEnd" />
  <Poi Pos="162.744308" Type="automix" Point="realEnd" />
 </Song>
</VirtualDJ_Database>

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Я нашел часть решения. Моя проблема в том, что моя база данных использует пробелы вместо вкладок. Поэтому я решил, что мне нужно использовать свойство preserveWhiteSpace, как описано ниже:

Dim oXMLFileMod As MSXML2.DOMDocument60
Set oXMLFileMod = New MSXML2.DOMDocument60
oXMLFileMod.preserveWhiteSpace = True
oXMLFileMod.Load "M:\VirtualDJ\database.xml"

Perform your XML action using https://excel-macro.tutorialhorizon.com/vba-excel-update-xml-file/

   oXMLFileMod.Save "M:\VirtualDJ\database.xml"

0 голосов
/ 11 марта 2020

Код, показанный в вопросе, не загружает XML из файла, он загружает строку XML.

oXMLDoc.LoadXML "M:\VirtualDJ\Database.xml"

И поскольку путь к файлу недопустим XML, результат недействителен XML (в моих тестах файл был пустым).

Вместо этого используйте метод Load:

oXMLDoc.Load "M:\VirtualDJ\Database.xml"

Вы можете прочитать о различные методы и свойства. Текущие ссылки перечислены под Где находится документация для MS XML API?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...