2009-10-05 3 views
26

매개 변수를 XSLT 스타일 시트에 전달하려고합니다.하지만 XSlCompiledTransform을 사용하여 문서를 변환 할 때 빈 xml 문서가 나타납니다. 매개 변수를 .NET을 통해 XSLT 스타일 시트에 전달

는 (사람들의 제안에 추가 한 후) 매개 변수를 추가하는 데 사용되는 C#을 방법

private static void CreateHierarchy(string manID) 
    { 

     string man_ID = manID; 

     XsltArgumentList argsList = new XsltArgumentList(); 
     argsList.AddParam("Boss_ID","",man_ID); 

     XslCompiledTransform transform = new XslCompiledTransform(); 
     transform.Load("htransform.xslt"); 

     using (StreamWriter sw = new StreamWriter("output.xml")) 
     { 
      transform.Transform("LU AIB.xml", argsList, sw); 
     } 


    } 

이며, 여기에 스타일 시트입니다. 내가 전달 해요 매개 변수는 'Boss_ID'

<?xml version="1.0" encoding="utf-8"?> 
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:template match="OrgDoc"> 
    <xsl:param name="Boss_ID"></xsl:param> 
    <xsl:processing-instruction name="xml-stylesheet"> 
    <xsl:text>type="text/xsl" href="..\styles\orgcharts.xsl" </xsl:text> 
    </xsl:processing-instruction> 
    <OrgDoc> 
     <xsl:for-each select="PosDets[@OC_Man = $Boss_ID]"> 
     <PosDets OC_Pos="{@OC_Pos}" OC_Sub="{@OC_Sub}" OC_Man="{@OC_Man}" OC_Ttl="{@OC_Ttl}" OC_Rnk="{@OC_Rnk}" OC_Bdg="{@OC_Bdg}" OC_Fnd="{@OC_Fnd}" OC_OL3="{@OC_OL3}" OC_Tmp="{@OC_Tmp}"> 
      <xsl:apply-templates select="../PosDets"> 
      <xsl:with-param name="mgrid" select="@OC_Pos"/> 
      </xsl:apply-templates> 
     </PosDets> 
     </xsl:for-each> 
    </OrgDoc> 
    </xsl:template> 
    <xsl:template match="PosDets" > 
    <xsl:param name="mgrid" /> 
    <xsl:if test="@OC_Man=$mgrid" > 
     <PosDets OC_Pos="{@OC_Pos}" OC_Sub="{@OC_Sub}" OC_Man="{@OC_Man}" OC_Ttl="{@OC_Ttl}" OC_Rnk="{@OC_Rnk}" OC_Bdg="{@OC_Bdg}" OC_Fnd="{@OC_Fnd}" OC_OL3="{@OC_OL3}" OC_Tmp="{@OC_Tmp}"> 
     <xsl:apply-templates select="../PosDets"> 
      <xsl:with-param name="mgrid" select="@OC_Pos"/> 
     </xsl:apply-templates> 
     </PosDets> 
    </xsl:if> 
    </xsl:template> 


    </xsl:stylesheet> 

이 간단한이

<OrgDoc><PosDets OC_Pos="161" OC_Man="9" OC_Ttl="Boss" OC_Rank="" OC_OL3="LU AIB" OC_Bdg="Has Budget" OC_Fnd="Payroll" OC_Sub="" OC_Tmp="" /><PosDets OC_Pos="190" OC_Man="161" OC_Ttl="Boss" OC_Rank="" OC_OL3="LU AIB" OC_Bdg="Has Budget" OC_Fnd="Payroll" OC_Sub="" OC_Tmp="" /><PosDets OC_Pos="199" OC_Man="190" OC_Ttl="Boss" OC_Rank="" OC_OL3="LU AIB" OC_Bdg="Has Budget" OC_Fnd="Payroll" OC_Sub="" OC_Tmp="" /></OrgDoc> 

사람이 도와 드릴까요 버전 소독있어 여기에 기밀 정보를 원하시면, 그러나 나는이 입력 문서를 모두 게시 할 수 없습니다?

감사

+0

정답을 얻으려면 @MichaelEdwards와 @divo를 결합하십시오. :) – David

+0

슬프게도 그 일은 여전히 ​​효과가 없습니다. 이것은 결과 XML 문서입니다. MrBliz

+0

정말인가요? 이 기사에 따르지 않음 : - http://www.xml.com/pub/a/2000/09/13/xslt/index.html – MrBliz

답변

49

당신은 당신의 XSLT 내에서 매개 변수를 정의해야하고 또한 Transform 호출에 인수로 XsltArgumentList 전달해야합니다

private static void CreateHierarchy(string manID) 
{ 
    string man_ID = manID; 

    XsltArgumentList argsList = new XsltArgumentList(); 
    argsList.AddParam("Boss_ID", "", man_ID); 

    XslCompiledTransform transform = new XslCompiledTransform(true); 
    transform.Load("htransform.xslt"); 

    using (StreamWriter sw = new StreamWriter("output.xml")) 
    { 
     transform.Transform("LU AIB.xml", argsList, sw); 
    } 
} 

xsl:paramxsl:stylesheet 요소 아래에 정의해야합니다 있습니다 :

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes" /> 

    <xsl:param name="Boss_ID"></xsl:param> 

    <xsl:template match="OrgDoc"> 

    <!-- template body goes here --> 

    </xsl:template> 


</xsl:stylesheet> 

이 간단한 XSLT 샘플 하나를 포함하는 단지 작은 출력 문서를 생성 할 XML 노드의 내용을 매개 변수의 값으로 설정합니다. 시도해보십시오 :

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:param name="Boss_ID"></xsl:param> 

    <xsl:template match="/"> 
    <out> 
     <xsl:value-of select="$Boss_ID" /> 
    </out> 
    </xsl:template> 

</xsl:stylesheet> 
+0

감사 디보 아직도하지만 작동하지 내가이 라인으로 XSL에 올바르게 있었던 파라미터를 참조 건가요 MrBliz

+0

내 업데이 트를 참조하십시오. 여전히 작동하지 않는 경우 입력 된 문서를 게시하십시오. 아마도 그 문제가 있습니다. –

+0

감사합니다 Divo, 실제로 원하는 매개 변수를 생성하지만 그 이유를 이해할 수 없습니다. 내 문서 작업. – MrBliz

5
당신은 아마 XSLT의 상단에있는 PARAM을 정의 할 필요가

:이 링크

http://projects.ischool.washington.edu/tabrooks/545/2004Autumn/ContentManagement/PassingParameters.htm

안 좋은 예하지만 최고의 I을 참조하십시오

<xsl:param name="Boss_ID" /> 
<OrgDoc> 
//rest of the XSLT 
</OrgDoc> 

빠른 Google로 찾을 수 있습니다.

+0

어떤 이유에서 스택 오버 플로우가 매개 변수 이름을 잃어 버렸습니다. 지금 질문을 수정했습니다. 링크를 가져 주셔서 감사합니다. . 여전히 작동하지 않지만 ( – MrBliz

관련 문제