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输出,所以我对输入和输出端的转换很好。
答案 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.CreateReader
和XContainer.CreateWriter
直接从XElement
容器流式传输。{3}}
答案 1 :(得分:1)
如果您想要使用XmlElement
的结果填充XslCompiledTransform.Transform
对象,则可以使用targetNode.CreateNavigator().AppendChild()
创建XmlWriter
并使用其中一个写入Transform
的{{1}}重载。