SQLServer读取XML文件的做法

SQLServer读取XML文件的做法,第1张

SQL Server 使得以XML导出数据变得更加简单 但在SQL Server 中导入XML数据并对其进行处理则有些麻烦

如果你参考Books Online(BOL) 你会发现有相关的条目 包括OPENXML以及 OPENROWSET 所有的这些例子都支持将XML文本作为已经声明的变量 这对于经常处理文本的用户来说非常方便 但对于希望在开发中读取XML文件并进行相应处理的开发人员来说就不是这样了 处理这样的问题 或许最好从内到外来对其进行分析

OPENXML是一个rowset函数(即返回一个rowset) 它的工作方式类似于rowset函数OPENQUERY和 OPENROWSET 使用OPENXML可以对XML数据执行JOINs *** 作而无需首先导入数据 你还可以将其同INSERT SELECT UPDATE以及DELETE等 *** 作联合使用 然而 要使用OPENXML 你必须执行两项OPENQUERY和OPENROWSET并不需要的任务 这两项任务需要两个系统存储进程 第一个是sp_xml_preparedocument 它将读取特定的XML文本并将其内容提取到内存中 其语法如下

sp_xml_preparedocument @hdoc = OUTPUT

[ @xmltext = ]

[ @xpath_namespaces =

具体参数如下 @hdoc 指向某内存区域的句柄(从作用上看等同于一个指针) 相关数据存放在这里 注意这是一个输出变量 当该进程运行后 该变量将包含指向XML文件内容在内存地址的句柄 由于你需要在随后使用此结果 因此要确保对其进行保存; @xmltext 实际上你所希望处理的XML文本; @xml_namespaces 为了正常 *** 作你的XML数据所需要的任何名字空间索引(namespace references) 注意在这里出现的任何URL都需要用尖括号(< >)括起来; 假设所传递的这些参数都有效 并且XML文档存在 那么你的XML数据就会被存放到内存中去 现在你就可以调用 sp_xml_preparedocument 传递存放有XML文件的变量 然后执行OPENXML 语法如下

OPENXML(idocint [in] rowpatternnvarchar[in] [flag yte[in]])

[WITH (SchemaDeclaration | TableName)]

注意 在本文中没有足够的文字来描述OPENXML所接收的参数 请参阅BOL以获取更多信息 在Transact SQL Reference中查找OPENXML

现在我们已经到达了最后的步骤 所有剩下的工作就是导入一个实际的XML文件到SQL并进行处理(很奇快为什么所有的BOL示例都没有涉及到这一关键的部分) (我必须感谢我的同事Billy Pang所给予的帮助 他帮助我解决这个问题 并给出了代码——尽管出于本文需要我对代码进行了裁减 谢谢Billy!) 基本的技巧是 将文件逐行按文本读取 然后把所有读取的行连接为一个大的VARCHAR变量 最后 将变量传递给前面所说的代码

以下就是读取文件并将其内容存放到某变量的代码

DECLARE @FileName varchar( )

DECLARE @ExecCmd VARCHAR( )

DECLARE @y INT

DECLARE @x INT

DECLARE @FileContents VARCHAR( )

CREATE TABLE #tempXML(PK INT NOT NULL IDENTITY( ) ThisLine VARCHAR( ))

SET @FileName = C:\Temp\CurrentSettings xml

SET @ExecCmd = type + @FileName

SET @FileContents =

INSERT INTO #tempXML EXEC master dbo xp_cmdshell @ExecCmd

SELECT @y = count() from #tempXML

SET @x =

WHILE @x < > @y

BEGIN

SET @x = @x +

SELECT @FileContents = @FileContents + ThisLine from #tempXML WHERE PK

= @x

END

SELECT @FileContents as FileContents

DROP TABLE #tempXML

现在在变量@FileContents变量中你已经获得了文件的全部内容 所需要做的只是将变量通过@xmltext参数传递给sp_xml_preparedocument 然后再调用OPENXML

lishixinzhi/Article/program/SQLServer/201311/22101

dom4j解析xml,然后把解析的数据封装到bean里。jsp页面上获取bean然后显示就行了。 和平常的从数据库取数据,封装后在页面上显示没有区别。不过就是不去数据库取数据,而是靠xml来取数据。

在你webxml里面配置这个spring的servlet的时候按如下代码编写即可 spring orgspringframeworkwebservletDispatcherServlet contextConfigLocation /WEB-INF/springweb/-servletxml classpath:spring/servlet/-servletxml 1

用PHP的XML解析

$xml = simplexml_load_string($data); //创建 SimpleXML对象 
print_r($xml); //输出 XML

这个连接介绍的方法在实践中并不经常使用,因为很原始。它适合 *** 作本地文件。 1如若你是获取xml,那应该使用 simplexml_load_file('url')这个函数,他返回一个xml的DOM模型对象,这个模块是专门针对xml应用设计的。具体可以查找php的simpleXML相关应用。 2如果你是获取html。那么,php中几乎所有的目录函数都支持远程 *** 作,即文件参数可以是网址。最适合的函数是file_get_contents('url'),他返回文件内容。 但是大部分免费空间禁止远程调用,如果是这样,fopen()或者其他函数都是不行的。那就只能在网页中用javascript获取然后处理或者送回网站处理,此方面内容属于ajax技术,你可以搜索一下。 3你如果要用到比较复杂一点的功能,比如要打开的页面 需要登陆,或者需要模拟cookie,就要用php的cURL库扩展,你可以找一下相关资料 我不能用一篇短文使你学会这几个模块的具体应用。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13412387.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-31
下一篇 2023-07-31

发表评论

登录后才能评论

评论列表(0条)

保存