2013-10-21 4 views
1

Lotus Notes DB의 XML 출력이 있습니다. 내 SSIS 패키지의 XML 소스를로드 할 때SSIS 패키지를 통해로드 할 XML 플랫 화

<Exec> 
    <project id='C000253' type='Approved' > 
     <DaysInOnHold>39</DaysInOnHold> 
     <DaysInCompleted>0</DaysInCompleted> 
     <ProjectComplexity type='1280'>Complex</ProjectComplexity> 
     <ChangeRequest> 
     <OnGoingAmt type='768'>-112</OnGoingAmt> 
     <EAmt type='768'>123</EAmt> 
     </ChangeRequest> 
     <ChangeRequest> 
     <ItemNbr type='768'>2</ItemNbr> 
     <EAmt type='768'>321</EAmt> 
     </ChangeRequest> 
     <IncidentalItem> 
     <ACost type='768'>0</ACost> 
     <Billable type='1280'>Billable</Billable> 
     </IncidentalItem> 
     <IncidentalItem> 
     <ACost type='768'>33</ACost> 
     <Billable type='1280'>Billable</Billable> 
     </IncidentalItem> 
     <MaterialItem> 
     <AQty type='768'>1</AQty> 
     <ItemNbr type='768'>4</ItemNbr> 
     </MaterialItem> 
     <MaterialItem> 
     <AQty type='768'>0</AQty> 
     <ItemNbr type='768'>5</ItemNbr> 
     </MaterialItem> 
    </project> 
    <project id='C110011' type='Not Approved'> 
    ... 
     ... 
    </project> 
</Exec> 

, 그것의 코스 매우 바람직하지 않은 모든 열 이름의 테이블을 생성 : 다음은 XML 구조입니다.

에게 는

나는 그것이 나에게 프로젝트 테이블이 할 수있는 기능을 제공하는 방식으로이 변환하고자, MaterialItem 그 후 개별 프로젝트 항목에 다시 관련이있을 것이다 ChangeRequest 테이블 (.

에게 는

겠습니까의 XSLT 수 대답은? 그렇다면 어떤 도움을 주시면 감사하겠습니다.

원하는 출력을 추가해야한다고 생각했습니다. (모든 유형 특성이 문제를 일으키는 것 같습니다.) 그래서 변환이 필요한 것 같습니다. 모든 속성을 제거합니다. 구체적으로 type = "...."

<Exec> 
    <project id='C0001111'> 
     <DaysInOnHold>33</DaysInOnHold> 
     <DaysInCompleted>0</DaysInCompleted> 
     <ProjectComplexity>Complex</ProjectComplexity> 
     <ChangeRequest> 
     <OnGoingAmt>52</OnGoingAmt> 
     <EAmt>123</EAmt> 
     </ChangeRequest> 
     <ChangeRequest> 
     <ItemNbr>2</ItemNbr> 
     <EAmt>321</EAmt> 
     </ChangeRequest> 
     <IncidentalItem> 
     <ACost>0</ACost> 
     <Billable>Not Billable</Billable> 
     </IncidentalItem> 
     <IncidentalItem> 
     <ACost>33</ACost> 
     <Billable>Billable</Billable> 
     </IncidentalItem> 
     <MaterialItem> 
     <AQty>1</AQty> 
     <ItemNbr>4</ItemNbr> 
     </MaterialItem> 
     <MaterialItem> 
     <AQty>0</AQty> 
     <ItemNbr>5</ItemNbr> 
     </MaterialItem> 
    </project> 
</Exec> 
+0

XML을 다른 구조로 변환하려는 경우 XSLT가 실제로 여기에 대한 답변이 될 수 있습니다. 하지만 먼저 어떤 구조가 필요한지 알아야합니다. 변환해야하는 항목을 이미 알고있는 경우 질문을 편집하여 출력 할 것으로 예상되는 XML 샘플을 표시 할 수 있습니까? 감사! –

답변

3

이것은 XSLT에서 간단합니다. 먼저, XSLT identity transform을 읽고 스스로 XSLT의 모든 노드와 속성을 그대로 복사해야합니다. 그냥 유형 속성을 제거 할 수 있지만 그대로 다른 속성을 남겨 둡니다

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

, 그냥 위의 XSLT에 다음 템플릿을 추가합니다. 당신은 모든 속성을 제거하려면 단순히 속성에 경기를 제거하는 템플릿을 변환 indentity을 개정,

<xsl:template match="@type" /> 

유형을 속성과 일치하지만, 출력 아무것도 (즉, 그들은 무시되지 않습니다). 예 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()"/> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
+0

흠, 문제가 하나 더 있다는 것을 제외하고는 모든 것이 완벽하게 작동했습니다. 때때로 ChangeRequest 또는 IncidentalItem과 같은 하위 요소가 뒤죽박죽이되어 순서가 아닌 것으로 보입니다. 요소의 순서는 ChangeRequest, ChangeRequest, IncidentalItem, ChangeRequest 일 수 있습니다. <---이 경우 내 SSIS 패키지에 문제가 있습니다. 요소 이름을 기반으로 내부 자식을 정렬하는 방법이 있습니까? 그래서 내가 일관성을 가지고 있습니까? – Sash

+1

예. ** project ** 엘리먼트와 일치하는 템플릿을 가지고, ** xsl : sort ** 매개 변수가 지정된 자식들에 대해 ** xsl : apply-templates **를 호출합니다 ("local-name()"정렬) 정렬에 대한 예제는 http://www.xml.com/pub/a/2002/07/03/transform.html에서 확인하십시오. 제대로 작동하지 않으면 전체를 물어 보는 것이 가장 좋습니다. 새로운 질문입니다. 이제이 질문이 받아 들여짐으로 표시되었습니다. 더 이상 질문하는 것이 좋습니다. 고마워요! –

관련 문제