XML文件的输出仅显示字节顺序标记。
XML文件的输出仅显示字节顺序标记。
我有一个XML文件,我正在尝试解析它,其内容完全如下所示的XML:
{REFERENCE-HERE} Filler ABC 012345 Filler2 Filler2 Filler2 Filler2 Filler2 Filler2
我一直在尝试使下面的代码(最初来自我在这里的问题)工作。其他用户(包括代码的创建者)已经成功使用它,但当我运行它时,输出文件只是ÿþ<
。我确保将文件编码为ANSI,并立即将记事本文件保存为.xml,但输出仍然只有字节顺序标记。
Option Explicit Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub ParseResults() '需要对Microsoft XML、v6.0进行引用 '需要对Microsoft Scripting Runtime进行引用 Dim xmlFilePath$, newFilePath$ Dim DOM As MSXML2.DOMDocument Dim entity As IXMLDOMNode Dim fso As Scripting.FileSystemObject '# 定义要加载为XML的文件 xmlFilePath = "路径" '# 定义修改后的XML的输出路径 newFilePath = "新路径" '# 创建DOM对象 Set DOM = CreateObject("MSXML2.DOMDocument") '# 加载XML文件 DOM.Load xmlFilePath '# 等待文档加载完成 Do Sleep 250 Loop Until DOM.readyState = 4 '# 获取entityID节点 Set entity = DOM.DocumentElement.getElementsByTagName("entityId")(0) '# 调用子例程将entity附加到"Item"标签 AppendEntity DOM, "Item", entity '# 调用子例程将entity附加到"AnotherItem"标签 AppendEntity DOM, "AnotherItem", entity '## 创建FSO以写入新文件 Set fso = CreateObject("Scripting.FileSystemObject") '## 尝试将新/修改后的XML写入文件 On Error Resume Next fso.CreateTextFile(newFilePath, True, True).Write DOM.XML If Err Then '## 在VBE的即时窗口中打印新XML Debug.Print DOM.XML MsgBox "无法写入" & newFilePath & ",请在VBE的即时窗口中查看XML。", vbInformation Err.Clear End If On Error GoTo 0 '清理 Set DOM = Nothing Set fso = Nothing Set entity = Nothing End Sub Sub AppendEntity(DOM As Object, tagName As String, copyNode As Object) '## 此子例程将子节点附加到与特定字符串标签匹配的所有XML节点。 Dim itemColl As IXMLDOMNodeList Dim itm As IXMLDOMNode '# 获取与tagName匹配的所有元素的集合 Set itemColl = DOM.DocumentElement.getElementsByTagName(tagName) '# 遍历集合,附加复制的节点 For Each itm In itemColl If itm.HasChildNodes Then '# 在Item的第一个子节点之前插入此节点 itm.InsertBefore copyNode.CloneNode(True), itm.FirstChild Else '# 将此节点追加到Item itm.appendChild copyNode.CloneNode(True) End If Next Set itm = Nothing Set itemColl = Nothing End Sub
确保代码没有产生错误 - 它创建了一个新文件,但它创建的文件是不正确的。正确的输出应该是(对于一些其他尝试该代码的人来说是这样的):
{REFERENCE-HERE} Filler ABC 012345 012345 Filler2 Filler2 Filler2 012345 Filler2 Filler2 Filler2
也就是说,代码将
{REFERENCE-HERE} Filler ABC 012345 012345 Filler2 Filler2 Filler2 012345 Filler2 Filler2 Filler2 DEF 678910 678910 Filler2 Filler2 Filler2 678910 Filler2 Filler2 Filler2
非常感谢您提供故障排除此问题的任何帮助。
XML文件输出只显示字节顺序标记(Byte Order Mark)的原因是使用了错误的文件编码方式。解决方法是在创建文本文件时指定正确的文件编码方式。
在给出的代码中,有两种方法可以尝试解决这个问题。第一种方法是在创建文本文件时使用`CreateTextFile`方法,并将第三个参数设置为`False`,表示创建ASCII编码的文件。第二种方法是使用`CreateTextFile`方法的另一种语法,将第三个参数设置为`True`,表示创建Unicode编码的文件。
此外,还需要注意代码中关于XML元素的嵌套关系。代码中通过遍历XML中的`entityId`标签来修改`Item`标签及其子节点,将`entityId`标签添加到`Item`标签中。
通过使用上述方法,可以正确地输出XML文件,并且在打开文件时不再只显示字节顺序标记。