首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

xml数据导入数据库中,异常: 预期的句柄 'eof' 找到 ''

2012-12-17 
xml数据导入数据库中,错误: 预期的句柄 ɾof' 找到 '.𧷬lare @idoc intdeclare @nv

xml数据导入数据库中,错误: 预期的句柄 'eof' 找到 '.'
declare @idoc int
declare @nvd xml
set @nvd ='
<entry name="CVE-2005-0001">
<refs>
<ref source="MISC"></ref>
<ref source="CONECTIVA"></ref>
<ref source="MANDRAKE"></ref>
</refs>
</entry>
'
exec sp_xml_preparedocument @idoc output, @nvd
insert into t
select * from openxml(@idoc,'/nvd/entry/refs/ref')
with(
nvd_name    nchar(20)      '.../@name',
source     varchar(20)      './@source'
)
exec sp_xml_removedocument @idoc



运行结果:

消息 6603,级别 16,状态 2,第 16 行
XML 分析错误: 预期的句柄 'eof' 找到 '.'。
..-->.<--/@name
语句已终止。
[最优解释]

declare @idoc int
declare @nvd xml
set @nvd ='
<entry name="CVE-2005-0001">
<refs>
<ref source="MISC"></ref>
<ref source="CONECTIVA"></ref>
<ref source="MANDRAKE"></ref>
</refs>
</entry>
'
exec sp_xml_preparedocument @idoc output, @nvd
--insert into t
select * from openxml(@idoc,'/entry/refs/ref')
with(
nvd_name    nchar(20)      '//@name[1]',
source     varchar(20)      '@source'
)
exec sp_xml_removedocument @idoc

[其他解释]
谢!
[其他解释]
那要是xml是:
<entry name="CVE-2005-0001">
<refs name="a">
<ref source="MISC"></ref>
<ref source="CONECTIVA"></ref>
<ref source="MANDRAKE"></ref>
</refs>
</entry>

同上怎么取的entry的name属性呢?
[其他解释]
没影响
6个字够了吧,CSDN真无聊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
[其他解释]
额,还是有问题啊
declare @idoc int
declare @nvd xml
set @nvd ='
<nvd>
<entry name="CVE-2005-0001">
<refs>
<ref source="MISC"></ref>
<ref source="CONECTIVA"></ref>
<ref source="MANDRAKE"></ref>
</refs>
</entry>
<entry name="CVE-2005-0002">
<refs>
<ref source="MISC"></ref>
<ref source="CONECTIVA"></ref>
<ref source="MANDRAKE"></ref>
</refs>
<entry/>
<nvd/>
'
exec sp_xml_preparedocument @idoc output, @nvd
insert into t
select * from openxml(@idoc,'/nvd/entry/refs/ref')
with(
nvd_name    nchar(20)      '//@name[1]',
source     varchar(20)      './@source'
)
exec sp_xml_removedocument @idoc


这样每个nvd_name取到的都是第一个entry里面的属性啊。。。。
[其他解释]
declare @idoc int
declare @nvd xml


set @nvd ='
<nvd>
<entry name="CVE-2005-0001">
<refs>
<ref source="MISC"></ref>
<ref source="CONECTIVA"></ref>
<ref source="MANDRAKE"></ref>
</refs>
</entry>
<entry name="CVE-2005-0002">
<refs>
<ref source="MISC"></ref>
<ref source="CONECTIVA"></ref>
<ref source="MANDRAKE"></ref>
</refs>
</entry>
</nvd>
'
exec sp_xml_preparedocument @idoc output, @nvd
--insert into t
select * from openxml(@idoc,'/nvd/entry/refs/ref')
with(
nvd_name    nchar(20)      '../../@name',
source     varchar(20)      '@source'
)
exec sp_xml_removedocument @idoc
[其他解释]
1楼也可以写成这样

declare @idoc int
declare @nvd xml
set @nvd ='
<entry name="CVE-2005-0001">
<refs>
<ref source="MISC"></ref>
<ref source="CONECTIVA"></ref>
<ref source="MANDRAKE"></ref>
</refs>
</entry>
'
exec sp_xml_preparedocument @idoc output, @nvd
--insert into t
select * from openxml(@idoc,'/entry/refs/ref')
with(
nvd_name    nchar(20)      '../../@name',
source     varchar(20)      '@source'
)
exec sp_xml_removedocument @idoc


两点“..”等于parentNode,明白否。
[其他解释]
两点“..”等于parentNode
那“.”等于神马捏?

热点排行