xml - 将 xml 文件导入到 sql server 表中

标签 xml

我正在寻求将 XML 文件读入 SQL Server 2008 R2 数据表的帮助。

我的 XML 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
    <e_objects xmlns="http://www.blank.info/ns/2012/objects">
    <item  item_id="41-FE-001">
    <class display="true">
    <class_name>FEEDER</class_name>
    </class>
    </item>
</e_objects>

我的建表 SQL 是这样的:

CREATE TABLE [dbo].[handover_data](
  [item_id] [nchar](15) NULL,
  [class] [nchar](10) NULL,
 ) ON [PRIMARY]
 GO

这是我正在使用的 SQL。我无法让它返回任何值:

SELECT xmldata.value('(item[@name="item_id"]/@value)[1])', 'NCHAR') AS item_id,
xmldata.value('(class_name)', 'NCHAR') AS class       
FROM ( 
SELECT CAST(x AS XML)
FROM OPENROWSET(BULK 'C:\xmlfile.xml',
SINGLE_BLOB) AS T(x)) AS T(x)
CROSS APPLY x.nodes('e_objects/*') AS X(xmldata);

如有任何帮助,我们将不胜感激。谢谢

最佳答案

好吧,首先 - 你又来了,like in your last question which I already answered , 忽略 XML 命名空间 - 不要!

<e_objects xmlns="http://www.blank.info/ns/2012/objects">
           *********************************************

那是 XML 命名空间 - 它存在是有原因的 - 不要只是忽略它!

那么您就没有注意 XML 文件的结构。你的<class_name>元素在 <class> 内元素,它又在 <item> 中节点。所以你需要相应地选择。

此外:您选择 XML 属性的语法无效;看看我的示例 - 这对你有用吗?

尝试这样的事情:

;WITH XMLNAMESPACES(DEFAULT 'http://www.blank.info/ns/2012/objects')
SELECT 
    xmldata.value('(@item_id)[1]', 'NCHAR(10)') AS item_id,
    xmldata.value('(class/class_name)[1]', 'NCHAR(20)') AS class       
FROM 
    (SELECT CAST(x AS XML)
     FROM OPENROWSET(BULK 'C:\xmlfile.xml',
     SINGLE_BLOB) AS T(x)) AS T(x)
CROSS APPLY 
    x.nodes('/e_objects/item') AS X(xmldata);

这会获取所有 <item> 的列表<e_objects> 下的节点作为X(xmldata) .然后我从这些元素中选择

  • item_id <item> 上的属性节点本身
  • <class>/<class_name> <item> 中包含的元素节点

另外:我建议不要使用NCHAR太多 - 它是固定长度,即它总是 10 或 20 个字符长 - 即使您的字符串只有 2 个字符。不是一个好主意,大多数类型 - 使用 NVARCHAR(20)相反 - 对于字符串长度 >= 5 更好!

关于xml - 将 xml 文件导入到 sql server 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11631352/

相关文章:

java - 如何使用 JAXB 附加外部生成的 XML 而不是 POJO 的变量值?

c# - 将 XML 文件读取到 C# DataSet 中

php - 如何检索 xml 数据的子级?

java - 如何使用 java 配置运行 Spring http 调用程序

java - 生成 Ant 构建文件

java - 在哪里放置自定义的第二个 web.xml

java - 读取在线xml文件并进行解析

java - 解析 XML 中存在的垂直制表符编码字符

java - 如何在android中更改/编辑具有键和值对属性的xml节点值?

c# - 如何解析包含节点列表的 XML 文件?