VB.NET如何实现XML文件创建、节点填充及内容写入?
问题根因
你写的代码只能生成空文件,核心问题有两点:
- 你只在内存中实例化了
XmlDataDocument、添加了XML声明,始终没有调用保存方法把内存里的XML结构写入磁盘文件 - 内存中的XML结构本身就不完整,除了XML声明外没有创建要求的根节点、各个业务子节点,就算执行保存也得不到符合要求的文件结构
- 你代码里用
File.Create生成的空文件流和后续创建的XmlDataDocument对象没有任何关联,流释放后自然就保留了空文件状态
完整实现代码
首先确保代码文件顶部导入以下命名空间:
Imports System.IO Imports System.Xml Imports System.Globalization
核心逻辑代码如下:
' 替换为你的XML文件实际存储路径 Dim filePathTest As String = "C:\your\target\path\test.xml" If Not File.Exists(filePathTest) Then Dim xmlDoc As New XmlDataDocument() ' 添加带utf-8编码的XML声明,和预期结构一致 Dim xmlDecl As XmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", Nothing) xmlDoc.AppendChild(xmlDecl) ' 创建根节点<Ampoules> Dim rootAmpoules As XmlElement = xmlDoc.CreateElement("Ampoules") xmlDoc.AppendChild(rootAmpoules) ' 批量添加58个<ampoule>节点(1个示例节点+额外57个同结构节点) For i As Integer = 1 To 58 Dim ampouleNode As XmlElement = xmlDoc.CreateElement("ampoule") ' 组装ampoule下的固定结构子节点 Dim nomNode As XmlElement = xmlDoc.CreateElement("nom") nomNode.InnerText = "product name" ampouleNode.AppendChild(nomNode) Dim typeNode As XmlElement = xmlDoc.CreateElement("type") typeNode.InnerText = "product type" ampouleNode.AppendChild(typeNode) Dim sousTypeNode As XmlElement = xmlDoc.CreateElement("sousType") sousTypeNode.InnerText = "product sub-type" ampouleNode.AppendChild(sousTypeNode) Dim codeNode As XmlElement = xmlDoc.CreateElement("code") codeNode.InnerText = "product reference" ampouleNode.AppendChild(codeNode) Dim xRayNode As XmlElement = xmlDoc.CreateElement("xRay") xRayNode.InnerText = "BW524/99/Ro" ampouleNode.AppendChild(xRayNode) Dim quantityNode As XmlElement = xmlDoc.CreateElement("quantity") quantityNode.InnerText = "product quantity" ampouleNode.AppendChild(quantityNode) ' 将组装完成的ampoule节点追加到根节点下 rootAmpoules.AppendChild(ampouleNode) Next ' 创建<Date>父节点及嵌套<date>子节点,写入格式为dd/MM/yyyy的当前日期 Dim dateParentNode As XmlElement = xmlDoc.CreateElement("Date") Dim dateChildNode As XmlElement = xmlDoc.CreateElement("date") dateChildNode.InnerText = DateTime.Now.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture) dateParentNode.AppendChild(dateChildNode) rootAmpoules.AppendChild(dateParentNode) ' 将完整XML结构写入文件,这是你原有代码缺失的核心步骤 xmlDoc.Save(filePathTest) Else ' 此处编写文件已存在时的后续处理逻辑 End If
实现注意点
- 批量生成同结构
<ampoule>节点直接用For循环实现,循环上限设为58即可满足当前数量要求,后续要调整节点数量直接改循环上限即可 - 日期格式化指定
CultureInfo.InvariantCulture是为了规避系统区域设置差异,保证输出的日期格式和示例一致,始终是日/月/年格式、分隔符为/ - 不需要手动创建
FileStream对象,XmlDocument.Save方法会自动处理文件创建、写入、资源释放的全流程,不会出现文件占用、写入不完整的问题 - 如果后续需要给不同
<ampoule>节点填充差异化内容,只需要在循环内根据计数变量i的值,给对应子节点的InnerText赋不同值即可
内容的提问来源于stack exchange,提问作者Oscar Pill
相关产品推荐
相关产品推荐

