XSLT使用来自Web表单的Xml数据转换XML

时间:2012-12-27 18:22:50

标签: c# asp.net xml xslt

网上有很多使用XSLT文件将XML文件转换为其他格式的示例,如下所示:

XslTransform myXslTransform = new XslTransform();
XsltSettings myXsltSettings = new XsltSettings();
myXsltSettings.EnableDocumentFunction = true;
myXslTransform.Load("transform.xsl");
myXslTransform.Transform("input.xml", "output.xml");

然而,这只是部分答案,我希望能够从Web表单获取XML输入数据并将其用作输入xml数据而不是'.xml'文件,但是没有找到任何具体的例子。使用Visual Studio我看到接受XmlReader对象作为参数的Load方法,但我不知道如何使用表单和TextBox控件中的数据创建其中一个。如果有人可以提供使用表单数据而不是输入文件转换XML的示例,那将非常有用。

3 个答案:

答案 0 :(得分:0)

创建一个类,并在回发期间从表单数据填充此类的实例并将其序列化(将其转换为xml)

以下是您的控制台示例

using System;
using System.Collections.Generic;

using System.Text;

using System.Xml.Serialization;

namespace Stackoverflow
{

    public class Program
    {

        static void Main(string[] args)
        {

          var p = new Person
            {
                FirstName = "Daniel",  /// in your case you get it from the form
                LastName = "Endeg"

            };

            var x = new XmlSerializer(p.GetType());
            x.Serialize(Console.Out, p);
            Console.WriteLine();
            Console.ReadLine();
        }
    }

    public class Person
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }
    }
}

答案 1 :(得分:0)

请注意,XslTransform自.NET 2.0以来已经过时,您应该使用XslCompiledTransform。如果您想使用XslSettings,请确保将其传递到XslCompiledTransform的{​​{1}}方法(例如http://msdn.microsoft.com/en-us/library/ms163425.aspx),只是创建它没有意义。

至于解析XML,你有一个字符串变量或属性(如Load的{​​{1}}属性)你有很多选项,你可以使用Text而不是{ {1}}例如

TextBox

或者您可以从字符串中创建XmlReaderStringReaderXslCompiledTransform proc = new XslCompiledTransform(); proc.Load("sheet.xsl"); using (StringReader sr = new StringReader(TextBox1.Text)) { using (XmlReader xr = XmlReader.Create(sr)) { proc.Transform(xr, null, Response.Output); } } ,并使用XPathDocument方法的重载,该方法需要XmlDocument作为第一个论点。

答案 2 :(得分:-1)

好的,在Visual Studio自动完成的一些帮助下,它列出了构造函数和方法的参数,我能够在Xslt转换操作中使用字符串输入和输出完成上述问题的工作答案。好极了。下面的示例答案假设您有三个包含Xslt文本数据和输入Xml文本数据以及输出Xml数据的字符串:

string XsltText;
string InputXML;
string OutputXml;

// define the xslt from a string
TextReader myXsltText = new StringReader(XsltText);
XmlReader myXslt = new XmlTextReader(myXsltText);

// define the input xml from a string
TextReader myXmlText = new StringReader(InputXML);
XmlReader myInputXml = new XmlTextReader(myXmlText);

// define the output XmlWriter for the results of the transform
TextWriter myOutputXmlTextWriter = new StringWriter();
XmlWriter myOutputXml = new XmlTextWriter(myOutputXmlTextWriter);

XslCompiledTransform myXslTransform = new XslCompiledTransform();
XsltSettings myXsltSettings = new XsltSettings();
myXsltSettings.EnableDocumentFunction = true;
myXslTransform.Load(myXslt);
myXslTransform.Transform(myInputXml, myOutputXml);

// the result from the transform comes from the TextWriter object
OutputXml = myOutputXmlTextWriter.ToString();

// clean up writers
myOutputXml.Flush();
myOutputXmlTextWriter.Close();
myOutputXml.Close();

要使此代码使用Web表单,您所要做的就是从表单元素(控件)的值(Text)获取字符串,输入XMl和Xslt可以使用TextBox控件,以及显示你可以使用标签的结果,非常有用,如果有人有更好的答案,请随时告诉我。