通过调用xslt中的C#函数来更改xml文件

Dot*_*ner 2 c# xml asp.net xslt

我的网站项目中有一个xml文件和一个xslt文件.当我运行该站点时,我需要从xslt调用ac#函数并更改xml文件中的值....以下是我的xml文件....我需要添加一个文本(比如"Mr.")in每个名字的前面都是通过ac#code ....添加之后,它应该反映在xml文件中....另外,作为下一步,我需要在xml文件中添加另一个节点(比如年龄)通过另一个c#函数....请注意,应该从我的xslt文件中调用c#函数....任何人都可以帮我一个简单的代码吗?

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <employee>
    <firstname>Kaushal</firstname>
    <lastname>Parik</lastname>
  </employee>
  <employee>
    <firstname>Abhishek</firstname>
    <lastname>Swarnkar</lastname>
  </employee>
</root>
Run Code Online (Sandbox Code Playgroud)

CSh*_*arp 8

是的,您可以从.xsl文件中调用C#函数.请参考以下代码.

这是您输入的XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<root>
<employee>
  <firstname>Kaushal</firstname>
  <lastname>Parik</lastname>
</employee>
<employee>
  <firstname>Abhishek</firstname>
  <lastname>Swarnkar</lastname>
</employee>
</root>  
Run Code Online (Sandbox Code Playgroud)

C#类中的格式化函数如下所示:

    public class MyXslExtension
{
    public string FormatName(string name)
    {
        return "Mr. " + name;
    }
}  
Run Code Online (Sandbox Code Playgroud)

应用以下xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
            xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
            xmlns:myUtils="pda:MyUtils">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="vQ">Mr. </xsl:variable>
<xsl:template match="@*|node()">
<xsl:copy>
  <xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="employee/firstname">
<xsl:element name="firstname">
  <xsl:value-of select="myUtils:FormatName(.)" />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

和C#Functin调用Formatting函数是这样的:

private void button3_Click(object sender, EventArgs e)
    {
        XsltArgumentList arguments = new XsltArgumentList();
        arguments.AddExtensionObject("pda:MyUtils", new MyXslExtension());

        using (StreamWriter writer = new StreamWriter("books1.xml"))
        {
            XslCompiledTransform transform = new XslCompiledTransform();
            transform.Load("transform.xslt");
            transform.Transform("books.xml", arguments, writer);
        }
    }  
Run Code Online (Sandbox Code Playgroud)

而输出的是:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<root>
<employee>
<firstname>Mr. Kaushal</firstname>
<lastname>Parik</lastname>
</employee>
<employee>
<firstname>Mr. Abhishek</firstname>
<lastname>Swarnkar</lastname>  
</employee>
</root>  
Run Code Online (Sandbox Code Playgroud)

我已经提到这个链接来回答你的问题.

希望这会帮助你.
如果对你有用,请标记+1.