
TiXmlDocumen pXMLDoc = new TiXmlDocument("");
if (pXMLDoc != NULL)
{
pXMLDoc->LoadFile();
}
TiXmlNode pNode = pXMLDoc->FirstChild(""); // 为根节点名称
// 获得元素
TiXmlElement pXmlElement = pNode->ToElement();
// 获得元素的属性
string strAttrib = pXmlElement->Attribute("name") // name为根元素的属性
// 获得元素的text
string strText = pXmlElement->GetText();
// 获得下一个指定名称的元素,一般用于遍历同类元素,多用于while循环中
pXmlElement= pXmlElement->NextSiblingElement("nextElement");
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
以上就是关于怎么将内存中字符串形式的XML文件赋给TiXmlDocument全部的内容,包括:怎么将内存中字符串形式的XML文件赋给TiXmlDocument、SQLServer读取XML文件的做法、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)