/ / Jak przekonwertować zestaw wyników Oracle na XML w VBScript - xml, oracle, vbscript, qtp

Jak przekonwertować zestaw wyników oracle na XML w VBScript - xml, oracle, vbscript, qtp

Używam QTP do wysyłania zapytań do Oracle DB i uzyskiwania wartości do zapisania w pliku tekstowym. Jak przekonwertować wynik do xml, abym mógł zapisać XML do pliku tekstowego.

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

pisać do pliku 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

Odpowiedzi:

2 dla odpowiedzi № 1

Jeśli nie jesteś wybredny, jeśli chodzi o domyślne nazewnictwo, najszybszym sposobem byłoby:

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

2 dla odpowiedzi nr 2

Możesz także użyć .Zapisać metoda przechowywania zestawu rekordów w pliku .XML (Pamiętaj, aby zdefiniować Const adPersistXML = 1). Format może być lepiej dopasowany do innych narzędzi Microsoft XML.


1 dla odpowiedzi nr 3

Myślę, że moim osobistym podejściem byłoby tworzenieobiekt XML, utwórz węzły potomne z tablicy wynikowej z zapytania, dołącz węzły potomne do nadrzędnego, a następnie zrzuć plik .xml z obiektu do pliku tekstowego.

Dawno temu napisałem następującą funkcję ogólnego przeznaczenia i pomyślałem, że może ci się ona przydać w tym, co próbujesz zrobić:

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

Spróbuj uruchomić następujący fragment kodu, aby zorientować się, jak to działa:

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

uwaga: nie będziesz potrzebować niczego w parametrze NodeValue do tego, co robisz, więc po prostu przekaż pustą wartość ciągu, a nie zapisze wartości, ale wypełni atrybuty.

Wystarczy pobrać nagłówki z tablicyzwrócone z zapytania (pozycja 0 w tablicy), a następnie przejrzyj pozostałe wiersze *. Po wygenerowaniu możesz użyć następującego kodu, aby utworzyć plik wynikowy i zrzucić do niego plik .xml:

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

ETA: Mogę spróbować wykopać kod do parsowania tablicy, którą generuje zapytanie, jeśli zajdzie taka potrzeba.