c# - .NET के माध्यम से एक्सएसएलटी स्टाइलशीट में पैरामीटर पास करना




xml xslt (2)

मैं एक एक्सएसएलटी स्टाइलशीट में पैरामीटर पास करने की कोशिश कर रहा हूं, लेकिन जब मैं XSlCompiledTransform का उपयोग कर दस्तावेज़ बदलता हूं तो मुझे बस एक खाली एक्सएमएल दस्तावेज़ मिल रहा है।

यह पैरामीटर जोड़ने के लिए उपयोग की जाने वाली सी # विधि है (लोगों के सुझावों को जोड़ने के बाद)

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>

क्या कोई मदद कर सकता है?

धन्यवाद


आपको अपने एक्सएसएलटी के भीतर पैरामीटर को परिभाषित करने की आवश्यकता है और आपको 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:param को xsl:stylesheet नीचे परिभाषित किया जाना चाहिए xsl: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>

यह सरल एक्सएसएलटी नमूना केवल एक छोटा आउटपुट दस्तावेज़ बनाएगा जिसमें एक एक्सएमएल नोड होता है जिसमें इसकी सामग्री आपके पैरामीटर के मान पर सेट होती है। आजमाइश कीजिये:

<?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>

आपको शायद एक्सएसएलटी के शीर्ष पर परम परिभाषित करने की आवश्यकता है:

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

यह लिंक देखें

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

एक अच्छा उदाहरण नहीं है लेकिन सबसे अच्छा मैं एक त्वरित गूगल के साथ मिल सकता है।





xslcompiledtransform