sql - 如何在 SQL Server 中从没有标签的 xml 文件中读取 xml 数据?
问题描述
我知道如何从标签中组织信息的文件中读取 xml 数据,我的意思是这样的文件:
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<Administrador>
<id> 8 </id>
<nombre> Nelle </nombre>
<valorDocId> 8399335355 </valorDocId>
<contrasenna> Glenn </contrasenna>
</Administrador>
<Administrador>
<id> 9 </id>
<nombre> Gayler </nombre>
<valorDocId> 1310348693 </valorDocId>
<contrasenna> Madonna </contrasenna>
</Administrador>
</dataset>
我用来阅读的代码是:
use Proyecto1
declare @filedata XML
select @filedata=BulkColumn from OpenRowSet(Bulk'File directory', Single_blob) x;
insert into Table(id, nombre, valorDocId, clave)
select
xData.value('id[1]', 'int') id,
xData.value('nombre[1]','varchar(30)') nombre,
xData.value('valorDocId[1]','int') valorDocId,
xData.value('contrasenna[1]','varchar(20)') clave
from @fileData.nodes('/dataset/Administrador') as
x(xData)
但是现在我需要读取一个没有标签组织的xml文件,至少不像上一个,xml是这样的:
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<Administrador id="1" nombre="Nelle" valorDocId="8399335355" contrasenna="Glenn"/>
<Administrador id="2" nombre="Gayler" valorDocId="1310348693" contrasenna="Madonna"/>
</dataset>
但是我之前使用的代码不起作用,它会抛出一个错误,说我无法在“id”列中插入 NULL 值,所以我认为数据没有被读取。那么我怎样才能读取第二个文件呢?
解决方案
例子
Declare @XML xml = '
<dataset>
<Administrador id="1" nombre="Nelle" valorDocId="8399335355" contrasenna="Glenn"/>
<Administrador id="2" nombre="Gayler" valorDocId="1310348693" contrasenna="Madonna"/>
</dataset>
'
Select id = x.v.value('@id','int')
,nombre = x.v.value('@nombre','varchar(50)')
,valorDocId = x.v.value('@valorDocId','varchar(50)')
,contrasenna = x.v.value('@contrasenna','varchar(50)')
From @Xml.nodes('dataset/Administrador') x(v)
退货
id nombre valorDocId contrasenna
1 Nelle 8399335355 Glenn
2 Gayler 1310348693 Madonna
编辑 - 从文件中获取 XML
Declare @XML xml
Select @XML = BulkColumn FROM OPENROWSET(BULK 'C:\Working\SomeXMLFile.xml', SINGLE_BLOB) x;
Select id = x.v.value('@id','int')
,nombre = x.v.value('@nombre','varchar(50)')
,valorDocId = x.v.value('@valorDocId','varchar(50)')
,contrasenna = x.v.value('@contrasenna','varchar(50)')
From @Xml.nodes('dataset/Administrador') x(v)
推荐阅读
- r - 使用 R 中的排列值从模型中获取汇总统计信息
- java - 找不到文件 java ini4j
- windows - 释放对已失效进程加载的 dll 的锁定;视窗 10
- c++ - 无法进入重载>>函数
- tensorflow - 如何查看 HuggingFace 数据集的汇总统计信息(例如样本数量;数据类型)?
- magento2 - Magento 2 共含税
- css - Rails 应用程序未加载 scss
- javascript - 添加新元素时如何自动向下滚动?
- c++ - 为什么我在使用 c++ 标头时在 cython 中遇到名称修改问题?
- python - Moviepy write_videofile 第二次工作但不是第一次?