.NETを経由してXSLTスタイルシートにパラメータを渡します
-
19-09-2019 - |
質問
私は、XSLTスタイルシートにパラメータを渡すためにしようとしているが、私は取得していますすべての文書はXslCompiledTransformではを使用して変換された空のXML文書です。
このパラメータを追加するために使用する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>
誰が助けることはできますか?
おかげ
解決
あなたはXSLT内のパラメータを定義する必要があります。また、XsltArgumentList
呼び出しの引数としてTransform
を渡す必要があります:
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
要素の下に定義されなければならないことに注意してくださいます:
<?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サンプルは、あなたのパラメータの値に設定し、その内容を持つ1つの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>
他のヒント
あなたはおそらくXSLTの上部にあるのparamを定義する必要があります:
<xsl:param name="Boss_ID" />
<OrgDoc>
//rest of the XSLT
</OrgDoc>
タグは、このリンクを参照してください。
未素晴らしい例が、私は簡単にGoogleで見つけることができる最高ます。
所属していません StackOverflow