如何用VBA移除XML文件首行并添加两行新内容?
解决XML文件首行删除并添加新内容的VBA方案
你现在的问题核心是保留原XML内容但去掉开头的XML声明行,然后在最前面添加新的XML声明和DOCTYPE节点。你的现有代码只是把新内容直接拼在原内容前,导致原首行还留在里面,接下来我帮你修改代码实现需求:
关键思路
- 读取文件内容后,定位并移除第一行(原XML声明)
- 将新的两行内容拼在处理后的原内容前
- 修正你代码里的字符串拼接语法错误(原代码里的数字和分号是语法错误,需要改成正确的字符串格式)
修改后的完整VBA代码
Dim Msg$ Dim NumFich As Integer Dim CheminNomFichier As String Private Sub Form_Load() NumFich = FreeFile CheminNomFichier = "C:\Users\nypaul\Desktop\out\output.xml" Open CheminNomFichier For Input As #NumFich Msg$ = Input(FileLen(CheminNomFichier), NumFich) Close #NumFich If Msg$ = "" Then MsgBox "le fichier est vide", vbCritical Else ' 移除第一行(原XML声明) Dim firstLineBreak As Long firstLineBreak = InStr(Msg$, vbCrLf) If firstLineBreak > 0 Then Msg$ = Mid(Msg$, firstLineBreak + Len(vbCrLf)) End If ' 准备要添加的新内容 Dim newHeader As String newHeader = "<?xml version=""1.0"" encoding=""ISO-8859-1""?>" & vbCrLf & _ "<!DOCTYPE StatusNotification SYSTEM ""StatusNotification.dtd"">" & vbCrLf ' 写入处理后的内容 NumFich = FreeFile Open CheminNomFichier For Output As #NumFich Print #NumFich, newHeader & Msg$ Close #NumFich End If End Sub
代码说明
- 移除首行:通过
InStr找到第一个换行符的位置,用Mid截取换行符之后的所有内容,这样就去掉了第一行 - 修正字符串拼接:原代码里的
1#、ISO - 8859 - 1这些写法是错误的,改成用双引号包裹的字符串(VBA里字符串内的双引号需要写两个""来转义) - 添加新内容:把新的XML声明和DOCTYPE合并成一个字符串,加上换行符保证格式整洁,再拼在处理后的原内容前
测试效果
处理后的XML文件开头会变成:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE StatusNotification SYSTEM "StatusNotification.dtd"> <ENVELOPE> <SHIPMENTS> <HEA> <ADDRESSES> <AEM> <COMPANY_ID /> <KDNR /> <NAME>abcd pvt ltd</NAME> <NAME2 /> <ABT /> <STR /> </AEM> </ADDRESSES> </HEA> </SHIPMENTS> </ENVELOPE>
内容的提问来源于stack exchange,提问作者nie
相关产品推荐
相关产品推荐

