如何在VBScript中将oracle结果集转换为XML

时间:2015-08-10 09:56:19

标签: xml oracle vbscript qtp

我正在使用QTP查询oracle DB并获取要写入文本文件的值。如何将结果转换为xml,以便我可以将XML写入文本文件。

strSQL ="select * from emp"
Set rs = objDBConn.Execute(strSQL)

写入txt文件

Set objFSO=CreateObject("Scripting.FileSystemObject")
outFile="C:\test.txt"
Set objFile = objFSO.CreateTextFile(outFile,True)
while not rs.EOF
row = ""
first_field = true
For Each field In rs.Fields
if (first_field = true) then
  row = field
  first_field = false
else
  row = row & " " & field
end if
Next  
objFile.Write row & vbCrLf
rs.MoveNext 
wend

3 个答案:

答案 0 :(得分:2)

如果您对默认命名不挑剔,那么最快的方法是:

select dbms_xmlgen.getxml( 'select * from emp') from dual

答案 1 :(得分:2)

您还可以使用.Save方法将记录集存储到.XML文件中(请记住定义Const adPersistXML = 1)。该格式可能更适合其他Microsoft XML工具。

答案 2 :(得分:1)

我认为我的个人方法是创建一个XML对象,从查询中从结果数组创建子节点,将子节点附加到父节点,然后将.xml从对象转储到文本文件中。 / p>

我很久以前写过以下通用功能,并认为您可能会发现它对您要做的事情有帮助:

Function RequestAddChildNodeWithAttributes(NodeLocation, NodeName, NodeIndex, NodeAttributes, NodeValue)
Set parentNode = objXML.SelectNodes(NodeLocation).Item(NodeIndex)
Set newNode = objXML.CreateElement(NodeName)
For AttributeLoop = 0 To CInt(UBound(NodeAttributes) / 2) Step 2
    If NodeAttributes(AttributeLoop) <> "" Then newNode.setAttribute NodeAttributes(AttributeLoop), NodeAttributes(AttributeLoop + 1)
Next
If NodeValue <> "" Then newNode.Text = NodeValue
parentNode.appendChild newNode
End Function

尝试运行以下代码段以了解其工作原理:

Set objXML = CreateObject("Microsoft.XMLDOM")
objXML.loadXML("<parent/>")
RequestAddChildNodeWithAttributes "/parent", "row1", 0, Array("header1", "result1", "header2", "result2", "header3", "result3"), "nodeValue1"
RequestAddChildNodeWithAttributes "/parent", "row2", 0, Array("header1", "result1", "header2", "result2", "header3", "result3"), "nodeValue2"
Print objXML.xml

注意:在NodeValue参数中你不需要任何东西来做你正在做的事情,所以只传入一个空字符串值,它不会写一个值但会填充属性。

您只需要从查询返回的数组中获取标头(数组中的位置0),然后循环遍历其余的行*。生成后,您可以使用以下代码创建结果文件并将.xml转储给它:

Set FileOut = CreateObject("Scripting.FileSystemObject").CreateTextFile(ResultFileName, true)
FileOut.Write objXML.xml
FileOut.Close

ETA:如果您需要,我可以尝试挖掘解析查询生成的数组的代码。