【问题标题】:How to convert oracle resultset to XML in VBScript如何在 VBScript 中将 oracle 结果集转换为 XML
【发布时间】:2015-08-10 09:56:19
【问题描述】:

我正在使用 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

【问题讨论】:

  • 什么是 XML 目标架构?
  • 我希望列名是每一行的 xml 标签。

标签: xml oracle vbscript qtp


【解决方案1】:

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

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

【讨论】:

  • 对。如果引擎可以免费吐出它,为什么要在 QTP 中这样做。 +1
  • 它在我的 Oracle 开发中完美运行。但是在 QTP 中,当我执行 strSQL ="select dbms_xmlgen.getxml('select * from emp') from dual"; Set rs= objDBConn.Execute(strSQL) 我在尝试执行查询时不断收到未指定的错误。所以我想我会使用QTP将它转换为xml
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    我很久以前写了以下通用函数,并认为它可能对你正在尝试做的事情有所帮助:

    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
    

    尝试运行以下 sn-p 以了解其工作原理:

    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:如果您需要,我可以尝试挖掘代码以解析查询生成的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 2013-09-28
      • 1970-01-01
      相关资源
      最近更新 更多