You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:01:06