使用来自web表单的XML数据进行XML转换

本文关键字:XML 数据 转换 表单 web | 更新日期: 2023-09-27 17:49:36

网络上有很多使用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的示例,那将非常有帮助。

使用来自web表单的XML数据进行XML转换

创建一个类,并在从表单数据回发期间填充该类的实例,并将其序列化(将其转换为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; }
    }
}

请注意,自。net 2.0以来,XslTransform已过时,您应该使用XslCompiledTransform代替。如果你想使用XslSettings,那么确保你把它们传递给XslCompiledTransformLoad方法(例如http://msdn.microsoft.com/en-us/library/ms163425.aspx),简单地创建它是没有意义的。

对于在字符串变量或属性(如TextBoxText属性)中解析XML,您有很多选项,您可以使用XmlReader而不是StringReader,例如

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

或者您可以从字符串创建XPathDocumentXmlDocumentXDocument,并使用Transform方法的重载,该方法将IXPathNavigable作为第一个参数。

好的,在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表单一起工作,你所要做的就是从表单元素(控件)的值(文本)中获取字符串,对于输入XMl和Xslt,你可以使用TextBox控件,并显示结果,你可以使用标签,所有这些都非常有用,如果有人有更好的答案,请随时让我知道。