繁体   English   中英

如何使用C#函数将XML转换为XSLT

[英]How to do XML to XSLT transformation with C# function

我有动态生成的XML,如下所示,它在运行时填充节点值。

<?xml version="1.0" encoding="utf-8" ?>
<master>
  <child>
    <category1>Category1_A</category1>
    <category2>Category2_B </category2>
  </child>
</master>

我的web.config中有一个类别代码配置密钥,如下所示

<add  key="Code"  value="A1|A2" />

以下是我的XSLT,我知道这格式不正确。

我在此XSLT中遇到以下问题

  1. 我如何在下面的函数中传递配置密钥,因为它不是XML。
  2. 如果此方法返回false,那么我想从XSLT属性返回String消息,例如“对不起,组合不匹配。”
  3. 我知道这有点令人困惑,但是我知道这很有趣。

     <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts"> <msxsl:script language="C#" implements-prefix="user"> <![CDATA[ public string checkCategory (string category1,string category2) { if( (category1=="Category1_A" && category1==" Category2_B") && ConfigurationManager.AppSetting["Code"].contains("A1")) return true; else return false; } ]]> </msxsl:script> <xsl:template match="master"> <child> <circumference> <xsl:value-of select="user: checkCategory (category1,category2)"/> <!--if method return false then : return Sorry, Combination doesn't match.”--> </circumference> </child> </xsl:template> </xsl:stylesheet> 

如果您的函数返回truefalse ,则应将返回类型更改为bool

<msxsl:script language="C#" implements-prefix="user">
    <![CDATA[
     public bool checkCategory (string category1,string category2)
     {
       if( (category1=="Category1_A" && category2==" Category2_B") && ConfigurationManager.AppSetting["Code"].contains("A1"))
         return true;
       else
         return false;
     }
   ]]>
</msxsl:script>

您可以稍微简化一下代码:

<msxsl:script language="C#" implements-prefix="user">
   <![CDATA[
     public bool checkCategory (string category1,string category2)
     {
        return (category1 == "Category1_A" && category2 == "Category2_B") &&
                 ConfigurationManager.AppSetting["Code"].contains("A1");
     }
   ]]>
</msxsl:script>

然后,您可以使用xsl:if

  <xsl:template match="master">
    <child>
      <circumference>
        <xsl:if select="user:checkCategory(category1,category2)">
           <xsl:text>Sorry, Combination doesn’t match.</xsl:text>
        </xsl:if>
      </circumference>
    </child>
  </xsl:template>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM