我该如何在.NET中使用XSLT?

5

我将基于可扩展样式语言转换,将一个XML文档翻译成另一个XML文档。请问在.NET中如何做到这一点?有哪些好的教程可以学习?

我已经找到了一些使用开源工具的方法,但是在.NET框架下应该怎么做呢?还有几个快速问题:

  1. 请问有人能给我一个关于XSLT操作顺序的简单明了的解释吗?我仍然有点困惑发生了什么?

  2. 有没有专门用于处理XSLT的.NET工具?我知道在使用XSLT、XSD和XML文件时,Visual Studio .NET的主菜单上会出现一个小的XML下拉列表。现在这也还行,但如果我有其他选择就更好了。

  3. 我不会实际地转换文件……嗯,我想可扩展样式表将是一个文件,但我想导入一个XML字符串,将其转换为另一个XML字符串,然后通过MVC设计模式中的视图输出。我该怎么做?


2
当有人给出你满意的答案作为解决方案时,请单击答案旁边的勾选标记将其标记为已接受。如果稍后有人提供更好的答案,您始终可以改变主意。 - Eric
1个回答

13

1) 请有人能够简单地解释一下XSLT的操作顺序吗?我还是有点糊涂,不知道会发生什么?

就使用方面而言,只有一种操作:你获取一些输入,然后XSLT引擎将其转换为一个输出。

2) 是否有任何明确的.Net工具可用于处理XSLT?我知道在处理XSLT、XSD和XML文件时,Visual Studio .NET的主菜单上会出现一个小型XML下拉列表。我想这样做还可以,但如果我有其他选择那就更好了。

使用XslCompiledTransform,你可以应用XSL转换。

3) 我不会真正转换文件...好吧,我想可扩展样式表将是一个文件,但我想导入一个xml字符串,将其转换为另一个xml字符串,然后通过MVC设计模式中的视图输出。有人试过这样疯狂的事情吗?如果是这样,请给予建议。

我上面提到的XslCompiledTransform类可以直接在流或XmlReader和XmlWriter对象上工作,因此你可以在内存中完成整个过程,而不需要任何临时文件。

以下是一个基本示例:

// Load the XSL transform from a file
var transform = new XslCompiledTransform();
transform.Load("foo.xslt");

// This is your input string
string input = /* blah */;

// Make an XML reader out of the string
XmlReader inputXmlReader;
using(var inputReader = new StringReader(input))
{
    inputXmlReader = XmlReader.Create(inputReader);
}

using(writer = new StringWriter()) // prepare a string writer for the output
{
    // if you need to pass arguments to the XSLT...
    var args = new XsltArgumentList();
    args.AddParam("key", "urn:xml-namespace-of-key", "value");

    // Apply the transformation to the reader and write it in our string writer
    transform.Transform(inputXmlReader, args, writer);

    // Retrieve the output string from the string writer
    return writer.GetStringBuilder().ToString();
}

我该在哪里找到关于如何做(...)的好教程?

如果您想学习XSLT语言本身,可以查看这个之前的问题:“如何开始进行XSLT转换?”


2
通过 transform.Load("foo.xslt"); 可以简单地加载样式表,使用 File.OpenRead 和 XmlReader 并不能带来任何好处。 - Martin Honnen
请注意,使用MS库进行XSL转换仅支持XSLT 1.0版本。第三方社区工具(如Saxon-HE)只能在.NET Framework中运行,而不能在.NET Core、.NET 6或更高版本中运行。 - plykkegaard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接