Asp.net 如何使用VB获取返回的XML并将特定元素插入SQL Server中的列中?

Asp.net 如何使用VB获取返回的XML并将特定元素插入SQL Server中的列中?,asp.net,sql,xml,vb.net,Asp.net,Sql,Xml,Vb.net,我有一个SQL Server数据库,需要用api调用返回的xml填充它。 这是返回的xml代码(不在文件中): 更具体地说,我需要获取ID、name、animal、description等节点,并将它们插入到数据库中它们各自的列中 它必须对所有的“宠物”节点重复这个过程 我可以在VB.net中执行此操作而不保存文件,就像保存xml字符串一样吗 请帮帮我,我已经在这上面呆了好几天了。假设您的XML结构包含在XML类型的变量(或存储过程参数)中,您可以执行以下操作: CREATE PROCEDURE

我有一个SQL Server数据库,需要用api调用返回的xml填充它。 这是返回的xml代码(不在文件中):

更具体地说,我需要获取ID、name、animal、description等节点,并将它们插入到数据库中它们各自的列中

它必须对所有的“宠物”节点重复这个过程

我可以在VB.net中执行此操作而不保存文件,就像保存xml字符串一样吗


请帮帮我,我已经在这上面呆了好几天了。

假设您的XML结构包含在
XML
类型的变量(或存储过程参数)中,您可以执行以下操作:

CREATE PROCEDURE dbo.InsertXmlData 
     @XmlData XML
AS BEGIN
   INSERT INTO dbo.YourTable(ID, PetName, Animal, Description)
      SELECT
         ID = Pet.value('(id)[1]', 'int'),
         PetName = Pet.value('(name)[1]', 'varchar(50)'),
         Animal = Pet.value('(animal)[1]', 'varchar(50)'),
         [Description] = Pet.value('(description)[1]', 'varchar(500)')
      FROM 
         @XmlData.nodes('/petfinder/pets/pet') AS xTBL(Pet)
END

它将这些节点中的信息作为一组行和列提供给您,您可以轻松地将这些行和列插入到SQL Server表中。因此,现在您只需要找到一种方法,从VB.NET代码中调用此存储过程,并将XML传入
@XmlData
参数,下面是一个示例,说明如何使用XPath和
XmlDocument
类从XML中提取每个宠物的数据:

Dim doc As XmlDocument = New XmlDocument()
doc.LoadXml(xmlString)
For Each pet As XmlNode In doc.SelectNodes("/petfinder/pets/pet")
    Dim id As String = pet.SelectSingleNode("id").InnerText
    Dim name As String = pet.SelectSingleNode("name").InnerText
    ' ...
Next

我假设您知道如何从那里将数据保存到SQL数据库中。

请原谅我的无知,但如何将我的xml转换为可用于此的内容呢?这就是我调用xml的方式,那么这个方法会起作用吗<代码>将xdoc作为新的XPathDocument(“http://api.petfinder.com/shelter.getPets?key=034262a3717e90292a04b0074f740e24&id=OK98“@leviathan:若要将其传递给存储过程,您需要获取整个XML的字符串表示形式-不确定此
XPathDocument
上的
.ToString()
是否有效-请尝试@利维坦:试试这个:
string xmlContents=xdoc.CreateNavigator().InnerXml-这将为您提供一个表示整个XML文档的字符串。将该字符串传递到存储过程中,就完成了!
Dim doc As XmlDocument = New XmlDocument()
doc.LoadXml(xmlString)
For Each pet As XmlNode In doc.SelectNodes("/petfinder/pets/pet")
    Dim id As String = pet.SelectSingleNode("id").InnerText
    Dim name As String = pet.SelectSingleNode("name").InnerText
    ' ...
Next