【问题标题】:XSLT Transform of XML using Xml data from a web form使用 Web 表单中的 Xml 数据对 XML 进行 XSLT 转换
【发布时间】:2012-12-27 18:22:49
【问题描述】:

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

【问题讨论】:

  • 只需使用doc.LoadXml(theFormsItemValue),其中doc 是一个新的XmlDocument。然后使用将 XMLDocument(或 XpathNavigator)作为参数的 Transform 的重载。

标签: c# asp.net xml xslt


【解决方案1】:

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

【讨论】:

  • 这是一个很好的解决方案,感谢您抽出宝贵时间发布此答案,我认为我想出的解决方案不太优雅,尽管它有效。
【解决方案2】:

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

至于解析 XML,你有一个字符串变量或属性(如 TextBoxText 属性),你有很多选择,你可以使用 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 作为第一个参数。

【讨论】:

  • 感谢您抽出宝贵时间回答我的问题。
【解决方案3】:

好的,在 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 控件,然后显示您可以使用标签的结果,都非常有用,如果有人有更好的答案,请随时告诉我。

【讨论】:

  • -1: 1) 不要使用new XmlTextReader。使用XmlReader.Create。此外,您需要将您的读者和作者等放入using 块中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多