xml - VBA 格式化问题处理 XML - Microsoft XML6.0
问题描述
我想在软件虚拟 DJ 中为我拥有的每首歌曲自动添加 3 个 POI(兴趣点)(目标是在另一个软件中触发相应的灯光秀)为了添加 3 个 POI,我想我需要编辑数据库.xml。我制作了一个 VBA 宏来编辑添加标签的文件,但是一旦我启动 Virtual DJ,它就会告诉我数据库已损坏并想要修复它,然后我添加的所有行都丢失了。我添加的是 100% 正确的(我复制了 Virtual DJ 生成的 POI)。实际上,只有使用 VBA 代码打开和关闭 Database.xml 才会产生错误弹出窗口(参见下面的示例,需要启用库“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 个可能的根本原因: - 使用 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's Lovin' Touch.mp3" FileSize="1667629">
<Tags Author="Susan Singer" Title="21 Bobby's Lovin' 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're The Boss.mp3" FileSize="2685767">
<Tags Author="Elvis presley" Title="21 You'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"
您可能想阅读各种方法和属性。当前链接列在MSXML API 的文档在哪里?
推荐阅读
- azure - 此版本的 SQL Server 不支持“CREATE CREDENTIAL”
- java - 在java流中使用return语句
- java - Intellij 不询问 Git 凭据,但在身份验证期间失败
- javascript - 如何在 React.js 中使用 componentWillUnmount 删除 setInterval
- odoo - 重叠的 Odoo 时间表
- unity3d - HoloLens - Unity:光标未与多维数据集对齐
- antlr - 使用 ANTLR 4 解析 SQL 'between' 和 'and' 表达式
- apache-kafka-streams - Kafka Streams 的 StreamsConfig.COMMIT_INTERVAL_MS_CONFIG 的合理值是多少
- entity-framework - 如何修复 EntityFrameworkCore 中的数据迁移错误?
- laravel - 在 laravel 上使用 put() 上传损坏的图像