XSL从XmlElement转换为XmlElement

时间:2015-03-24 18:38:04

标签: c# xml xslt

XmlElement beforeTransform =getXmlElementForTransform();
XmlElement afterTransfrom;

XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("my.xslt", settings, new XmlUrlResolver());

我的代码

xslt.Transform("input.xml","output.xml");

所需的输出

xslt.Transform(beforeTransform,afterTransform);
ThirdPartyFunction(afterTransform);

有大约15个重载的重载,但我找不到符合我需要的那个。我知道使用transform(或没有输入XmlElement对象)没有直接的XmlElement输出,所以我对输入和输出端的转换很好。

2 个答案:

答案 0 :(得分:1)

对于输入,您应该能够使用XmlElement.CreateNavigator()。对于输出,您可以将XmlWriter流式传输到StringWriter,然后将其读回:

        using (var writer = new StringWriter())
        {
            using (var xmlWriter = XmlWriter.Create(writer))
            {
                xslt.Transform(beforeTransform.CreateNavigator(), xmlWriter);
            }
            var tempDoc = new XmlDocument();
            tempDoc.LoadXml(writer.ToString());
            afterTransfrom = tempDoc.DocumentElement;
        }

注意 - 未在编译之外进行测试。

顺便说一句,如果您愿意切换到Linq-to-XML,则可以使用XContainer.CreateReaderXContainer.CreateWriter直接从XElement容器流式传输。{3}}

答案 1 :(得分:1)

如果您想要使用XmlElement的结果填充XslCompiledTransform.Transform对象,则可以使用targetNode.CreateNavigator().AppendChild()创建XmlWriter并使用其中一个写入Transform的{​​{1}}重载。