C# 将XML导入SQL Server数据库

C# 将XML导入SQL Server数据库,c#,asp.net,sql-server,xml,import,C#,Asp.net,Sql Server,Xml,Import,我有一个非常复杂的任务——创建一个将XMl文件导入MSSQL数据库的软件。有一个严重的问题——每个文件都有不同于datatable的结构。例如: 数据库: 它有如下列:ImageURL、Title、Content XML: 每个XML文件都是不同的,我将给出两个示例: 二, 有没有开源的解决方案 *更新* 我忘了告诉您,我将在以下步骤中将此代码用于ASP.NET应用程序: 用户选择要导入的XML文档的url 用户将在GUI中选择要导入数据库的标记 在代码隐藏中,将创建用于导入当前文件的规则并将其

我有一个非常复杂的任务——创建一个将XMl文件导入MSSQL数据库的软件。有一个严重的问题——每个文件都有不同于datatable的结构。例如:

数据库: 它有如下列:ImageURL、Title、Content

XML: 每个XML文件都是不同的,我将给出两个示例:

二,

有没有开源的解决方案

*更新*

我忘了告诉您,我将在以下步骤中将此代码用于ASP.NET应用程序:

用户选择要导入的XML文档的url 用户将在GUI中选择要导入数据库的标记 在代码隐藏中,将创建用于导入当前文件的规则并将其存储到数据库中。 如何以最简单的方式实现这一点,有什么提示/技巧吗?如果你没有源代码,请给我一些提示。谢谢
请注意,每个文件都有不同的结构

是否手动导入这些文件

你已经标记了这个c,所以我猜你想写点什么

我愿意

创建windows窗体或WPF应用程序, 使用opendialog并选择文件 您想要导入。 对于每个文件,检查特定节点的存在以确定 我正在读的文件 使用Linq进行查询 将项目输出到对象列表中

public class ContentItem 
{
    public string ImageUrl [get;set;}
    public string Title {get;set;}
    public string Content {get;set;}
}
循环浏览对象列表和 将它们插入数据库。
例如,您可以使用xsl将所有其他格式转换为您的标准XML。例如,您确定标准模式与示例1中的类似。这样,您只需要决定对非标准xml文件使用哪种转换

您需要找出您拥有的不同版本,并编写一些代码来处理每个xml结构

您可以在SQL Server中这样做

1:

2:

三,

四,


问题:在第一个示例中,为什么选择“Title[1]”而不是“Title”?@Branislav–value只能从1个元素返回值。我们知道只有一个元素,但解析器不知道,因此[1]告诉value函数选择Title的第一个匹配项。每个CONTENTS元素都有这个函数吗?@Branislav–Yes@节点“/contents”将在结果集中为每个内容节点提供一行。标题[1]将为您提供当前内容节点中第一个出现的标题。如果我想使用这样的3结构:链接到图像。。。我不完全理解你的解决方案
<item imageURL="url" title="title" content="content">
public class ContentItem 
{
    public string ImageUrl [get;set;}
    public string Title {get;set;}
    public string Content {get;set;}
}
declare @XML xml

set @XML = 
'<contents>
    <ImageURL>www.123.com/image.png</ImageURL>
    <Title>Some text</Title>
    <Content>Content of item</Content>
</contents>
<contents>
    <ImageURL>www.123.com/image.png</ImageURL>
    <Title>Some text</Title>
    <Content>Content of item</Content>
</contents>'

select 
  N.value('ImageURL[1]', 'varchar(max)') as ImageURL,
  N.value('Title[1]', 'varchar(max)') as Title,
  N.value('Content[1]', 'varchar(max)') as Content
from @XML.nodes('/contents') as T(N)
ImageURL               Title      Content
---------------------  ---------  ---------------
www.123.com/image.png  Some text  Content of item
www.123.com/image.png  Some text  Content of item
declare @XML xml
set @XML = '<item imageURL="url" title="title" content="content"></item>'

select 
  N.value('@imageURL', 'varchar(max)') as ImageURL,
  N.value('@title', 'varchar(max)') as Title,
  N.value('@content', 'varchar(max)') as Content
from @XML.nodes('item') as T(N)
ImageURL   Title     Content
--------   -----     -------
url        title     content
declare @XML xml

set @XML = 
'<contents>
  <content>
    <someOtherNode>
      <ImageURL>www.FirstURL.com/image.png</ImageURL>
    </someOtherNode>
  </content>
</contents>
<contents>
  <content>
    <someOtherNode>
      <ImageURL>www.SecondURL.com/image.png</ImageURL>
    </someOtherNode>
  </content>
</contents>'

select 
  N.value('ImageURL[1]', 'varchar(max)') as ImageURL
from @XML.nodes('/contents/content/someOtherNode') as T(N)
ImageURL
---------------------------
www.FirstURL.com/image.png
www.SecondURL.com/image.png
declare @XML xml

set @XML = 
'<content>
   <imageURL>
     <url>first url</url>
   </imageURL>
   <info>
     <title>title 1</title>
     <text>text 1</text>
   </info>
 </content>
 <content>
   <imageURL>
     <url>second url</url>
   </imageURL>
   <info>
     <title>title 2</title>
     <text>text 2</text>
   </info>
 </content>'

select 
  N.value('imageURL[1]/url[1]', 'varchar(max)') as ImageURL,
  N.value('info[1]/title[1]', 'varchar(max)') as Title,
  N.value('info[1]/text[1]', 'varchar(max)') as Content
from @XML.nodes('/content') as T(N)
ImageURL    Title    Content
---------   -------  -------
first url   title 1  text 1
second url  title 2  text 2