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 № 1Jeś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.