2012-08-02 3 views
0

xmlsource를 통해 SSIS에서 xml 문서를 구문 분석하는 방법에 대해 설명합니다. 루트 태그가 없습니다. XSLT를 통해 xml 문서에 루트 태그를 추가하려고 시도했지만 오류가 발생했습니다.XSLT를 사용하여 XML 문서에 루트 노드 태그를 추가하는 방법

[XML 작업] 오류 : "여러 루트 요소가 있습니다. 줄 11, 위치 2. ".

루트 요소를 추가하는 데 사용할 XSL은 무엇입니까? help..this는

당신이 그것을 어떻게 사용합니까,

<organizational_unit> 
    <box_id>898</box_id> 
    <hierarchy_id>22</hierarchy_id> 
    <parent_box_id>0</parent_box_id> 
    <code>Team</code> 
    <description /> 
    <name>CAPS Teams</name> 
    <manager_title /> 
    <level>0</level> 
</organizational_unit> 
<organizational_unit> 
    <box_id>967</box_id> 
    <hierarchy_id>31</hierarchy_id> 
    <parent_box_id>0</parent_box_id> 
    <code>main</code> 
    <description /> 
    <name>Protegent</name> 
    <manager_title /> 
    <level>0</level> 
    <organizational_unit> 
     <box_id>968</box_id> 
     <hierarchy_id>31</hierarchy_id> 
     <parent_box_id>967</parent_box_id> 
     <code>19L</code> 
     <description>19L</description> 
     <name>19L</name> 
     <level>1</level> 
    <managers> 
     <manager> 
      <hierarchy_mgr_id>243</hierarchy_mgr_id> 
      <hierarchy_id>31</hierarchy_id> 
      <box_id>968</box_id> 
      <rep_id>19499</rep_id> 
      <unique_rep_id>100613948</unique_rep_id> 
     <first_name>Ed</first_name> 
     <last_name>Kill</last_name> 
     </manager> 
    </managers> 
    </organizational_unit> 
    <organizational_unit> 
     <box_id>1152</box_id> 
     <hierarchy_id>31</hierarchy_id> 
     <parent_box_id>967</parent_box_id> 
     <code>UNKNOWN_m</code> 
     <description>Unknown Reps</description> 
     <name>Unknown Reps</name> 
     <level>1</level> 
    </organizational_unit> 
</organizational_unit> 
+0

나는 잘 모릅니다. XSL은 XML에서 작동하며 차례로 유효해야합니다. 루트 요소가 없으면 유효하지 않으므로 XSL은 해당 요소와 통신하지 않습니다. 루트리스 XML이 있다면 유일한 옵션은 PHP 또는 사용중인 언어와 같은 것을 통해 루트 노드를 문자열 처리하는 것입니다. – Utkanos

+1

@Utkanos : "올바른"것이 아니라 "잘 형성된"것을 의미합니다. XML 문서는 다음 경우에 유효합니다. 2. 주어진 XML 스키마를 만족시킨다. –

답변

0

당신이 사용합니까 XSLT 프로세서 그럼 아래의 XML 소스를 찾아주세요 .. 매우 시급하다하십시오? 나는 보통 문자열 처리를 사용하여 XML을 구성하라는 제안을하지 않지만 루트 요소가없는 단편이있는 경우 문자열 연결을 사용하면 "<root>" + fragment + "</root>"이 올바른 형식의 문서를 얻는 가장 쉬운 방법입니다. XSLT는 조각을 처리 할 수 ​​있지만 그렇게하는 방법은 사용하는 XSLT 프로세서 나 XML 파서에 따라 달라집니다. 예를 들어 .NET에서 을 XmlReaderSettings으로, ConformanceLevel을 조각으로 설정 한 다음 XPathDocument (XSLT 1.0 및 XslCompiledTransform) 그리고 아마도 Saxon의 XdmNode (물론 내가 정확히 기억하는지 모르겠지만)도 마찬가지입니다.

스타일 시트는 단순히

<xsl:template match="/"> 
    <root> 
    <xsl:copy-of select="node()"/> 
    </root> 
</xsl:template> 

root 요소에 모든 최상위 노드를 포장 할 것이다.

+0

덕분에 당신은 나의 XML 파일의 구조가 \t <자식 노드 ....> \t \t \t <자식 노드 아래처럼 보이는 – user1571002

+0

을 회신 할 수 있습니다. ...> \t \t <자식 노드 ....> 난 아래의 오류 있어 다시 솔루션을 적용 번 후 [XML 태스크 ] E rror : 다음 오류 메시지와 함께 오류가 발생했습니다 : "여러 루트 요소가 있습니다. 줄 11, 위치 2 "입니다. 그러나 ... 태그가 의 첫 번째 집합에 xml에 추가되었습니다. – user1571002

+0

게시물에 SSIS 및 XML 원본이 언급되어 있으며 오류 메시지에 XML 작업이 언급되어 있지만 익숙하지 않습니다. 문자열 연결에 대한 제 제안은 모든 프로그래밍 언어에서 수행 할 수 있습니다. 제안 사항은 조각 모드에서 XmlReader를 사용하고 .NET 코드 (예 : C#, VB.NET 또는 기타 .NET 언어)로 변환을 실행하면 XSLT가 작동합니다. SSIS에 맞는 방법을 모르겠다. 익숙한 사람은 내 제안이 그 맥락에서 실현 가능한지 여부를 알려줄 필요가있다. –

관련 문제