上下文:.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。
关于.net - 如何在 .NET 中链接/嵌套 XSL 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3727521/