如何在c#中将xml文档转换为数据表

Posted

技术标签:

【中文标题】如何在c#中将xml文档转换为数据表【英文标题】:how can i convert xml document to data table in c# 【发布时间】:2021-09-04 11:26:27 【问题描述】:

我从 api 作为 xml 得到以下响应

<ROOT>

<valid>1</valid>
<org_name> test org </org_name>
<count_of_vedios>3</count_of_vedios>
<total_length>351</total_length>

    <Video1>
        <Title>The Distinguished Gentleman</Title>
        <Director>Jonathan Lynn</Director>
        <Length>112 Minutes</Length>
        <Format>DVD</Format>
        <Rating>R</Rating>
    </Video1>
    <Video2>
        <Title>Her Alibi</Title>
        <Director>Bruce Beresford</Director>
        <Length>94 Mins</Length>
        <Format>DVD</Format>
        <Rating>PG-13</Rating>
    </Video2>
    <Video3>
        <Title>Chalte Chalte</Title>
        <Director>Aziz Mirza</Director>
        <Length>145 Mins</Length>
        <Format>DVD</Format>
        <Rating>N/R</Rating>
    </Video3>

</ROOT>

我需要用信息填写 aspx 页面的一些字段: org_name : 测试组织 count_of_vedios : 3 总长度:351

我还需要用节点中的 vedios 填充 gridview

标题 |导演 |长度 |格式 |评分 |

【问题讨论】:

有一个从 XML 创建数据集或 .NET 类的实用程序:docs.microsoft.com/en-us/dotnet/standard/serialization/… 这能回答你的问题吗? XmlDataSource in GridView 【参考方案1】:

数据集在这里有 4 个表,所以我所做的就是用 vedio 替换 vedio# 标记,现在数据集将有 2 个表,一个用于一般节点,另一个用于 vedios

DataTable general_dt = new DataTable();
DataTable vedios_dt = new DataTable();
string xml_str = document.DocumentElement.InnerXml.ToString();
                xml_str = Regex.Replace(xml_str, @"<Video[0-9]1,3>", "<Video>");
                xml_str = Regex.Replace(xml_str, @"<\/Video[0-9]1,3>", "</Video>");

                DataSet ds = new DataSet();
                ds.ReadXml(new System.IO.StringReader(xml_str));

                if (ds.Tables.Count > 0)
                
                    XmlNode newnode;
                    newnode = document.ReadNode(new XmlTextReader(new StringReader(xml_str)));
                    if (newnode["valid"].InnerText.ToString() == "1")
                    
                        general_dt = ds.Tables[0];
                        
                        vedios_dt = ds.Tables[1];
                    
        ````

【讨论】:

【参考方案2】:

试试 xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.Data;

namespace ConsoleApplication1

    class Program
    
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        
            DataTable dt = new DataTable();
            dt.Columns.Add("Title", typeof(string));
            dt.Columns.Add("Directory", typeof(string));
            dt.Columns.Add("Length", typeof(string));
            dt.Columns.Add("Format", typeof(string));
            dt.Columns.Add("Rating", typeof(string));

            XDocument doc = XDocument.Load(FILENAME);
            List<XElement> videos = doc.Root.Elements().Where(x => x.Name.LocalName.StartsWith("Video")).ToList();

            foreach (XElement video in videos)
            
                dt.Rows.Add(new object[] 
                    (string)video.Element("Title"),
                    (string)video.Element("Director"),
                    (string)video.Element("Length"),
                    (string)video.Element("Format"),
                    (string)video.Element("Rating")
                );

            

        
    

【讨论】:

以上是关于如何在c#中将xml文档转换为数据表的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中将字符串转换为 XML 文档

在 SQL 中将 XML 文档转换为表格数据集的有效方法,因为随着 xml 的增长,交叉应用 xml 查询的性能呈指数级下降

如何在 C# 中将 .docx 转换为 .pdf [关闭]

在 php 中将 XML 文档转换为数组时,有没有办法将其转换回来并将其保存为属性为元素的 XML 文件?

在 Groovy 中将字符串 XML 片段转换为文档节点

如何在 C# 中将嵌套列表转换为 XML