Python verwenden, um DataSet zu kratzen und Daten von RDL abzufragen

Ich habe heute mit der Absicht, eine SSRS RDL-Datei (XML) mit Python zu analysieren, um die DataSet und Abfrage Daten zu sammeln. Ein neues Projekt hat mich zurück auf eine Vielzahl von Berichten und Datenquellen mit der Absicht zu konsolidieren und zu bereinigen, was wir veröffentlicht haben.

Ich konnte dieses Skript verwenden, um eine CSV-Datei mit den folgenden Spalten zu erstellen: Systempfad | Report Dateiname | Befehlstyp | Befehlstext |

Es ist nicht sehr elegant, aber es funktioniert.

Was ich in der Lage bin, mit diesem Beitrag zu tun, ist für jeden von euch Experten da draußen, die es entweder schon einmal probiert haben oder in XML-Parsing mit Python erlebt haben, um einen Schuss zu machen, um ihn aufzuräumen und die Möglichkeit zu bieten:

  • Include Header, das wäre XML-Tags
  • Geben Sie den Datensatznamen in die Spalte ein
  • Ergebnisse in einzelne Datei liefern

Hier ist der volle Code in meiner Datei "rdlparser.py":

import sys, os from xml.dom import minidom xmldoc = minidom.parse(sys.argv[1]) content = "" TargetFile = sys.argv[1].split(".", 1)[0] + ".csv" numberOfQueryNodes = 0 queryNodes = xmldoc.getElementsByTagName('Query') numberOfQueryNodes = queryNodes.length -1 while (numberOfQueryNodes > -1): content = content + os.path.abspath(sys.argv[1])+ '|'+ sys.argv[1].split(".", 1)[0]+ '|' outputNode = queryNodes.__getitem__(numberOfQueryNodes) children = [child for child in outputNode.childNodes if child.nodeType==1] numberOfQueryNodes = numberOfQueryNodes - 1 for node in children: if node.firstChild.nodeValue != '\n ': if node.firstChild.nodeValue != 'true': content = content + node.firstChild.nodeValue + '|' content = content + '\n' fp = open(TargetFile, 'wb') fp.write(content) fp.close() 

One Solution collect form web for “Python verwenden, um DataSet zu kratzen und Daten von RDL abzufragen”

Ich weiß, dass du nach Python gefragt hast. Aber ich dachte, Powershell's in XML-Handling-Fähigkeiten gebaut würde dies ziemlich einfach machen. Während ich sicher bin, dass es keine Guru-Ebene ist, denke ich, dass es ziemlich schön herauskam (die Zeilen beginnend mit # sind Kommentare):

 # The directory to search $searchpath = "C:\" # List all rdl files from the given search path recusrivley searching sub folders, store results into a variable $files = gci $searchpath -recurse -filter "*.rdl" | SELECT FullName, DirectoryName, Name # for each of the found files pass the folder and file name and the xml content $files | % {$Directory = $_.DirectoryName; $Name = $_.Name; [xml](gc $_.FullName)} # in the xml content navigate to the the DataSets Element | % {$_.Report.DataSets} # for each query retrieve the Report directory , File Name, DataSource Name, Command Type, Command Text output thwese to a csv file | % {$_.DataSet.Query} | SELECT @{N="Path";E={$Directory}}, @{N="File";E={$Name}}, DataSourceName, CommandType, CommandText | Export-Csv Test.csv -notype 
  • Python ElementTree XML Ändern von Elementen mit mehreren Werten
  • So ersetzen Sie HTML-Kommentare mit benutzerdefinierten <comment> -Elementen
  • Parse XML-Datei, um benötigte Daten abzurufen und in der Mongodb-Datenbank in Python zu speichern
  • Os.walk () python: xml Darstellung einer Verzeichnisstruktur, Rekursion
  • Faithfully Preserve Kommentare in Parsed XML (Python 2.7)
  • OpenERP 7 Hinzufügen von Feld zu vorhandenem Modul - XML ​​Validate Error
  • Übergeben von NoType-Attributen in BeautifulSoup
  • Entfernen von untergeordneten Elementen in XML mit Python
  • Openerp-Funktionsfelder
  • Wie verwandle ich eine XML-Datei mit XSLT in Python?
  • Python-Essiggurke zu xml
  • Python ist die beste Programmiersprache der Welt.