本文介绍了通过调用XSLT C#的功能改变的xml文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个XML文件,并在我的网站项目的XSLT文件。当我运行的网站,我需要从XSLT调用C#的功能和改变的XML文件中的值....下面给出的是我的xml文件....我需要添加一个文本(例如先生)的通过交流#code每个名字前面加....之后,它应该体现在xml文件中....另外,作为下一步,我需要添加另一个节点在XML文件(比如年龄)通过另一个C#功能....请注意,C#函数应该从我的XSLT文件被称为....谁能帮我用一个简单的code这个????

 <?XML版本=1.0编码=UTF-8&GT?;
<根和GT;
  <员工>
    <&名字GT; Kaushal< /姓名>
    <&姓氏GT; Parik< /姓氏>
  < /员工>
  <员工>
    <&名字GT;&阿布舍克LT; /姓名>
    <&姓氏GT; Swarnkar< /姓氏>
  < /员工>
< /根>


解决方案

是的,你可以调用从的.xsl文件C#的功能。请参考以下code。

这是您的输入XML文件:

 <?XML版本=1.0编码=UTF-8&GT?;
<?xml样式表类型=文/ XSL的href =cdcatalog.xsl&GT?;
<根和GT;
<员工>
  <&名字GT; Kaushal< /姓名>
  <&姓氏GT; Parik< /姓氏>
< /员工>
<员工>
  <&名字GT;&阿布舍克LT; /姓名>
  <&姓氏GT; Swarnkar< /姓氏>
< /员工>
< /根>

在C#类格式化函数是这样的:

 公共类MyXslExtension
{
    公共字符串FORMATNAME(字符串名称)
    {
        返回先生+名称;
    }
}

应用以下的xsl:

 <?XML版本=1.0编码=UTF-8&GT?;
<的xsl:样式版本=1.0的xmlns:XSL =htt​​p://www.w3.org/1999/XSL/Transform
            的xmlns:msxsl =瓮:架构 - 微软COM:XSLT排除-result- prefixes =msxsl
            的xmlns:myUtils =掌上电脑:MyUtils>
< XSL:输出方法=XML缩进=YES/>
< XSL:变量名=VQ>先生。 < / XSL:变量>
<的xsl:模板匹配=@ * |节点()>
< XSL:复制>
  < XSL:申请模板选择=@ * |节点()/>
< / XSL:复制>
< / XSL:模板>
<的xsl:模板匹配=员工/名字>
< XSL:元素名称=名字>
  <的xsl:value-of的选择=myUtils:FORMATNAME()/>
< / XSL:组件>
< / XSL:模板>
< / XSL:样式>

和C#载体作用调用格式化函数是这样的:

 私人无效button3_Click(对象发件人,EventArgs的发送)
    {
        争论的XsltArgumentList =新的XsltArgumentList();
        arguments.AddExtensionObject(PDA:MyUtils,新MyXslExtension());        使用(StreamWriter的作家=新的StreamWriter(books1.xml))
        {
            XslCompiledTransform变换=新XslCompiledTransform();
            transform.Load(transform.xslt);
            transform.Transform(books.xml中,争论,作家);
        }
    }

而放出来的是:

 <?XML版本=1.0编码=UTF-8&GT?;
<?xml样式表类型=文/ XSL的href =cdcatalog.xsl&GT?;
<根和GT;
<员工>
<&名字GT;先生。 Kaushal< /姓名>
<&姓氏GT; Parik< /姓氏>
< /员工>
<员工>
<&名字GT;先生。阿布舍克< /姓名>
<&姓氏GT; Swarnkar< /姓氏>
< /员工>
< /根>

我已经提到回答你题。

希望这会帮助你。结果
请注明+1,如果它是对你有用....

I have a xml file and an xslt file in my website project. When I run the site, I need to call a c# function from xslt and alter the values in xml file.... Given below is my xml file.... I need to add a text (say "Mr.") in front of every firstname through a c# code.... After adding, it should reflect in the xml file.... Also, as a next step, I need to add another node in the xml file (say age) through another c# function.... Please note that the c# function should be called from my xslt file.... Can anyone help me with a simple code for this????

<?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>
解决方案

Yes, you can call C# function from .xsl file. Please refer following code.

This is your input XML File:

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

Formatting function in a C# class is like this:

    public class MyXslExtension
{
    public string FormatName(string name)
    {
        return "Mr. " + name;
    }
}  

Apply following 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>

And C# Functin to call Formatting function is like this:

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);
        }
    }  

And the out put is:

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

I have referred this link to answer your question.

Hope this will help you.
Please mark +1 if it is useful to you....

这篇关于通过调用XSLT C#的功能改变的xml文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 06:42