Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理XML的VBA格式问题-Microsoft XML6.0_Xml_Vba_Format_Edit - Fatal编程技术网

处理XML的VBA格式问题-Microsoft XML6.0

处理XML的VBA格式问题-Microsoft XML6.0,xml,vba,format,edit,Xml,Vba,Format,Edit,我想在虚拟DJ软件中为我拥有的每首歌曲自动添加3个POI(兴趣点)(目标是在另一个软件中触发相应的lightshow) 为了添加3POI,我想我需要编辑Database.xml。我制作了一个VBA宏来编辑添加标记的文件,但一旦启动Virtual DJ,它就会告诉我数据库已损坏并希望修复它,然后我添加的所有行都将丢失。我添加的内容100%正确(我复制了虚拟DJ生成的POI)。 事实上,只有使用VBA代码打开和关闭Database.xml才会生成错误弹出窗口(请参见下面的示例,需要启用库“micro

我想在虚拟DJ软件中为我拥有的每首歌曲自动添加3个POI(兴趣点)(目标是在另一个软件中触发相应的lightshow) 为了添加3POI,我想我需要编辑Database.xml。我制作了一个VBA宏来编辑添加标记的文件,但一旦启动Virtual DJ,它就会告诉我数据库已损坏并希望修复它,然后我添加的所有行都将丢失。我添加的内容100%正确(我复制了虚拟DJ生成的POI)。 事实上,只有使用VBA代码打开和关闭Database.xml才会生成错误弹出窗口(请参见下面的示例,需要启用库“microsoft xml 6.0”)

我试着用Atom手动编辑,结果成功了。(这不是一个可行的解决方案,因为我有数百首歌曲要处理) 我怀疑有两个可能的根本原因: -使用VBA保存文件时的格式设置? -VirtualDJ打开时检查数据库大小

我的XML处理知识非常基础。我急切地想找到一个愿意测试它的人。我在许多XML主题中搜索了一个解决方案,但没有找到

下面是database.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>


问题中显示的代码不会从文件中加载XML,而是加载一个XML字符串

oXMLDoc.LoadXML "M:\VirtualDJ\Database.xml"
由于文件路径不是有效的XML,因此结果是无效的XML(在我的测试中,文件是空的)

改用
Load
方法:

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

您可能需要了解各种方法和属性。当前链接列在“我找到了部分解决方案”下。 我的问题是我的数据库使用空格而不是制表符。 所以我想我需要使用“preserveWhiteSpace”属性,如下所述:

Dim oXMLFileMod As MSXML2.DOMDocument60
Set oXMLFileMod = New MSXML2.DOMDocument60
oXMLFileMod.preserveWhiteSpace = True
oXMLFileMod.Load "M:\VirtualDJ\database.xml"
使用https://excel-macro.tutorialhorizon.com/vba-excel-update-xml-file/

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


您是否尝试启用Microsoft XML 6.0?是的,启用了XML 6.0-我添加了一个数据库示例(我无法附加该文件)。我一眼就能告诉您,添加到问题中的XML无效。没有打开的
VirtualDJ_数据库
元素。问题是,粘贴到问题“丢失”中的内容是如何丢失的?你(无意中)把它删掉了吗?这是VBA代码生成的吗?或者…?你说得对@Cindymister,我错把它编辑掉了。。我又加了一次
   oXMLFileMod.Save "M:\VirtualDJ\database.xml"