.net - 如何在 .NET 中链接/嵌套 XSL 转换

标签 .net xml .net-3.5 xslt

上下文:.NET Framework 3.5

我意识到如何使用 XSLT 执行单个 XML 转换,但没有找到任何关于链接 XML 转换的好例子。

输入: - 作为 XPathDocument 的 XML 文档。 - 多个 XSL 文件的文件路径。

预期输出: - 最好是 XPathDocument/IXPathNavigable,表示应用了所有转换的 XML,一个接一个。

示例场景:

输入 xml:<doc></doc>

xsl-1:添加了 <one /> 的 .xsl作为 doc 元素的子元素。 xsl-2: 添加 <two /> 的 .xsl作为 doc 元素的子元素。

预期结果

<doc><one /><two /></doc>

目标

利用 XPathDocument/IXPathNavigable 或更好的仅向前特性。避免将整个文档加载到内存中。

最佳答案

可能像下面这样(我还没有尝试编译它):

XslCompiledTransform xsl1 = new XslCompiledTransform();
xsl1.Load("xsl1.xsl");

XslCompiledTransform xsl2 = new XslCompiledTransform();
xsl1.Load("xsl2.xsl");

using (Stream stream = new MemoryStream())
{
     using (XmlReader xmlReader1 = XmlReader.Create("source.xml"))
     {
          xsl1.Transform(xmlReader1, stream);
     }

     stream1.Position = 0;

     using (XmlReader xmlReader2 = XmlReader.Create(stream))
     {
         xsl2.Transform(xmlReader2, "output.xml");
     }
}

通过使用 xmlreader,您将只获得您正在寻找的转发。我刚刚将第一个结果输出到 MemoryStream,但您可以对临时文件执行此操作。

为了获得额外的一点性能,您可能需要查看预编译您的 xslt。

XSLT Compiler (xsltc.exe)

关于.net - 如何在 .NET 中链接/嵌套 XSL 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3727521/

相关文章:

javascript - 使用javascript遍历xml

c# - ASP.NET - 条件 Web.config

asp.net - Server.Transfer() 与 Response.Redirect() 的性能方面

c# - Invoke() 正在阻塞

c# - YouTube FLV 下载链接

java - 为什么 SwitchCompat 不能在 Android Studio 上运行?

sql - SQL Server 2008 查询中的 XML 数据类型

c# - 设计器模式下的 ASP.NET 用户控件属性值选项

.net - 我应该保持 SerialPort 连接打开吗?

c# - 我如何使用 Linq 对通用列表进行排序?