2017-02-21 148 views
0

我想读XML文件和大容量复制到数据库读取XML文件来使用C#asp.net

我的XML就像是数据表:

<products> 
    <product> 
     <id>1</id> 
     <name>product one</name> 
     <subproducts> 
     <subproduct> 
      <color>Red</color> 
      <stock>1</stock> 
     </subproduct> 
     <subproduct> 
      <color>Green</color> 
      <stock>2</stock> 
     </subproduct> 
     </subproducts> 
     <images> 
     <image>http://qwqeq.com</image> 
     <image>http://asdasd.com</image> 
     </images> 
    </product> 
</products> 

我希望得到三个数据表这对于产品,子产品和图像,并尝试批量插入数据库。

我该如何实现这一目标?

+0

到目前为止您有试过什么吗? – jjj

+0

是的,我尝试使用数据集ReadXml方法,但它给了我6数据表,我不知道如何使用。这些产品是产品副产品副产品图像图像。我需要三个相互关联的数据表。 – Can

回答

0

你已经尝试必须是类似下面的方式,

DataSet objDataSet = new DataSet(); 
objDataSet.ReadXml("FilePath.xml"); 

它只是分组的节点,形成表。

你需要做一些在下面的链接中解释得很好。

http://csharp.net-informations.com/xml/how-to-read-xml.htm

希望这有助于!

0

您可以通过XML转换成存储过程作为XML参数和shredd它有:

DECLARE @xml XML= 
N'<products> 
    <product> 
     <id>1</id> 
     <name>product one</name> 
     <subproducts> 
     <subproduct> 
      <color>Red</color> 
      <stock>1</stock> 
     </subproduct> 
     <subproduct> 
      <color>Green</color> 
      <stock>2</stock> 
     </subproduct> 
     </subproducts> 
     <images> 
     <image>http://qwqeq.com</image> 
     <image>http://asdasd.com</image> 
     </images> 
    </product> 
</products>'; 

SELECT p.value(N'id[1]',N'int') AS productID 
     ,p.value(N'name[1]',N'nvarchar(max)') AS productName 
     ,sp.value(N'color[1]','nvarchar(max)') AS subproductColor 
     ,sp.value(N'stock[1]','int') AS subproductStock 
     ,img.value(N'image[1]',N'nvarchar(max)') AS imageURL 
--INTO #tmpTbl 
FROM @xml.nodes(N'/products/product') AS A(p) 
OUTER APPLY p.nodes(N'subproducts/subproduct') AS B(sp) 
OUTER APPLY p.nodes(N'images') AS C(img) 

结果

productID productName subproductColor subproductStock imageURL 
1   product one Red    1    http://qwqeq.com 
1   product one Green    2    http://qwqeq.com 

使用SELECT ... INTO #tmpTbl的结果写入到一个临时表。然后使用SELECT DISTINCT ... FROM #tmpTbl来检索插入到最终结构中的值。