2010-07-08 2 views
1

오늘 데이터 세트 및 쿼리 데이터를 수집하기 위해 Python을 사용하여 SSRS RDL 파일 (XML)을 구문 분석하기위한 목적을 설정했습니다. 최근 프로젝트를 통해 내가 게시 한 내용을 통합하고 정리할 목적으로 다양한 보고서 및 데이터 소스를 추적 할 수 있습니다.Python을 사용하여 RDL에서 DataSet 및 쿼리 데이터를 긁음

이 스크립트를 사용하여 다음 열을 포함하는 CSV 파일을 만들 수있었습니다. 시스템 경로 | 보고서 파일 이름 | 명령 유형 | 명령 텍스트 |

매우 우아하지는 않지만 작동합니다.

나는이 게시물로 할 수 있기를 바라고있다. 이미이 도구를 사용해 보았거나 Python으로 XML 구문 분석을 해본 경험이있는 전문가 중 누구 에게라도 권할 만하다. 능력에 :

  • 는 XML 태그 것 헤더를 포함

여기에 하나의 파일로 결과를 제공 컬럼에 데이터 집합 이름을 포함 내 "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() 

답변

0

나는 파이썬을 요구했다. Powershell이 ​​XML 처리 기능을 내장하고 있기 때문에 매우 간단하게 만들 수 있다고 생각했습니다.

# 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 
+0

는이 .ps1 파일에 그걸 얻기 위해 약간의 변화 아름답게 근무 : 나는 전문가 수준하지 않습니다 확신하지만, 나는 (#으로 시작하는 줄은 주석이다) 꽤 잘 나온 것 같아요. 나는 그것을 바로 버리고 그것을 실행하려고 노력했다. 그리고 powershell은 "빈 파이프 요소"를 좋아하지 않았다. 그래서 마지막 $ files 명령을 같은 줄에 넣었다. PowerShell로 많은 노출을 경험하지는 못했지만이 기능을 통해 나를 끌어 들일 수 있습니다. 도와 주셔서 감사합니다 JasonHorner! – Vinnie