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
相关产品推荐
相关产品推荐

