急!!!如何在VBA中创建自动换行的XML文件

MadFrog_Ever 2013-11-04 03:06:12
工程要求从一个原始utf-8格式的xml文件读取数据并生成新的utf-8格式xml文件,由于原始文件有德文,因此用
Open fileName For Append As #1 来生成xml文件,德文就变成了乱码,故用MSXML2.DOMDocument对象来添加,但是最后由个问题就是,生成出来的xml文件时在一行的,用IE打开时换行的,但是用Nodepad++打开却是在一行,请问有什么方法能让它自动换行啊,非常感谢!!

以下是用来测试xml文件ForTest.xml及我自己生成xml文件outPut.xml,为来往方便测试,只留下一个节点,如果有乱码,请忽略。
ForTest.xml:
<?xml version="1.0" encoding="utf-8"?>
<root>
<value>Markieren Sie dieses Kontrollkästchen, um das Herunterladen der E/A-Variablen der CIP-Symbolik zu ermöglichen.</value>
</root>

outPut.xml:
<?xml version="1.0" encoding="utf-8"?>
<root><value>Markieren Sie dieses Kontrollkästchen, um das Herunterladen der E/A-Variablen der CIP-Symbolik zu ermöglichen.</value></root>


Sub CreateXML()
Dim fileName As String
Dim objXML As Object
Set objXML = CreateObject("MSXml2.DOMDocument")
fileName = "E:\ForTest.xml"
If Not objXML.Load(fileName) Then
Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason
End If

Dim point As Object
Set point = objXML.SelectSingleNode("root")
Dim attr As Object
Set attr = point.ChildNodes.Item(0)
'Debug.Print attr.Text

Dim strOutputPath As String
strOutputPath = "E:\outPut.xml"

Dim xmldoc, rootNode, Header, messageNode, typeNode As Object
Set xmldoc = CreateObject("MSXML2.DOMDocument")
xmldoc.PreserveWhitespace = True
Set rootNode = xmldoc.createElement("root")
Set xmldoc.DocumentElement = rootNode
Set Header = xmldoc.createProcessingInstruction("xml", "version='1.0' encoding='utf-8'")
xmldoc.InsertBefore Header, xmldoc.ChildNodes(0)

Set messageNode = xmldoc.createElement("value")
rootNode.appendChild messageNode
messageNode.Text = attr.Text
xmldoc.Save strOutputPath
End Sub
...全文
363 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
dsd999 2013-11-05
  • 打赏
  • 举报
回复
也谢谢你能贴出解决的方法。
dsd999 2013-11-05
  • 打赏
  • 举报
回复
无满意结贴不会返分。 你把分给我下面回复的那人吧。
MadFrog_Ever 2013-11-05
  • 打赏
  • 举报
回复
找了一圈,貌似没有直接的办法,只能用一个比较笨的方法了,再写一个函数用来在生成新的xml文件之后,再去读取并加入换行符。 Call AddLineBreak(strOutputPath)
Sub AddLineBreak(file As String)
    Dim readFile As String, FSO, openFile As Object    
    If Dir(file) = "" Then MsgBox "Not found file!", vbExclamation: Exit Sub
    Set FSO = CreateObject("Scripting.FileSystemObject")    
    Set openFile = FSO.OpenTextFile(file, 1, -1)
    readFile = openFile.ReadAll
    openFile.Close
    
    Dim valuePre, rootSuf As String
    valuePre = "<root>" & vbCrLf & vbTab & "<value>"     
    rootSuf = "</value>" & vbCrLf & "</root>"
    Dim newFile As String
    newFile = Replace(readFile, "<root><value>", valuePre)
    newFile = Replace(newFile, "</value></root>", rootSuf)
    
    Set openFile = FSO.OpenTextFile(file, 2, -1)
    openFile.writeline newFile
    openFile.Close
    Set FSO = Nothing
    Set openFile = Nothing
End Sub
另外请斑竹帮忙结贴吧,谢谢!

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧