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

VB.NET如何从DataTable行生成指定格式的XML文件

修正VB.NET代码以生成目标XML格式

问题说明

需要将包含Source和Target两个字段(Target无数据)的DataTable数据保存为指定结构的XML,但当前代码生成的XML结构不符合预期。


目标XML格式

<?xml version="1.0" encoding="utf-8"?>
<body>
  <trans-unit>
    <source>Some Text-1</source>
    <target />
  </trans-unit>
  <trans-unit>
    <source>Some Text-2</source>
    <target />
  </trans-unit>
  ...
</body>

当前错误的XML输出

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<body>
  <trans-unit>
    <source xmlns="Some Text-1" />
    <target />
    <source xmlns="Some Text-2" />
    <target />
    ...
</body>

修正后的VB.NET代码

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
    Dim xdoc As New XmlDocument()
    
    ' 创建XML声明和根节点
    Dim xmlDeclaration As XmlDeclaration = xdoc.CreateXmlDeclaration("1.0", "utf-8", Nothing)
    Dim xRoot As XmlElement = xdoc.CreateElement("body")
    xdoc.AppendChild(xmlDeclaration)
    xdoc.AppendChild(xRoot)

    ' 遍历DataTable的每一行
    For Each row As DataRow In dtTranslation.Rows
        ' 为每一行创建独立的<trans-unit>节点
        Dim xTU As XmlElement = xdoc.CreateElement("trans-unit")
        
        ' 创建<source>节点并设置文本内容
        Dim xSource As XmlElement = xdoc.CreateElement("source")
        xSource.InnerText = row("Source").ToString()
        
        ' 创建空的<target>节点
        Dim xTarget As XmlElement = xdoc.CreateElement("target")
        
        ' 组装节点层级
        xTU.AppendChild(xSource)
        xTU.AppendChild(xTarget)
        xRoot.AppendChild(xTU)
    Next

    ' 保存XML文件
    xdoc.Save("E:\Temp\TestXML-3.xml")
End Sub

关键修正点

  • 循环内新建<trans-unit>:原代码在循环外仅创建一个xTU节点,导致所有行的source/target都追加到同一个节点下。现在每次循环都生成新的<trans-unit>,保证每行对应独立的节点结构。
  • 正确设置<source>内容:原代码误用CreateElement的第二个参数(该参数用于指定命名空间),改用InnerText设置节点文本,避免生成错误的xmlns属性。
  • 调整XML声明:通过CreateXmlDeclaration的第三个参数传入Nothing,移除多余的standalone="no"属性,匹配目标格式的XML声明。

内容的提问来源于stack exchange,提问作者Rihard Hibler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:57:37