在XmlDocument上应用XSLT并获取更新的XmlDocument

时间:2015-01-12 13:22:03

标签: c# xml xslt xslt-2.0

我要制作一个升级机制,用于更新XML文档(到另一个xml文档)。

我要尊重的方法的签名是:

public XmlDocument Update(XmlDocument sourceDocument){...}

在此上应用XSLT文件的最有效方法是什么?

我希望能够使用XslTransform类,但它只接受stream和XmlWriter作为输出的参数。

所以我知道我可以这样做:

public XmlDocument Update(XmlDocument sourceDocument){
    XslTransform myXslTransform = new XslTransform();
    myXslTransform.Load("myXsl.xsl"); 
    MemoryStream ms = new MemoryStream();
    myXslTransform.Transform(sourceDocument, null, ms);
    XmlDocument output = new XmlDocument();
    output.Load(ms);
    return output;
}

但我发现这不是很有效(知道我的XSLT将重命名一些节点,在中间添加一个节点,添加一个子节点)。有没有办法做得更好?

我的“唯一”约束是:输入/输出:XmlDocument,要加载的外部XSLT。

1 个答案:

答案 0 :(得分:1)

如果要将System.Xml.XmlDocument与Microsoft提供的当前XSLT 1.0实现(XslCompiledTransform)一起使用,则可以使用

XmlDocument resultDocument = new XmlDocument();
using (XmlWriter xw = resultDocument.CreateNavigator().AppendChild()) {
  XslCompiledTransform proc = new XslCompiledTransform();
  proc.Load("myXsl.xsl");
  proc.Transform(sourceDocument, null, xw);
  xw.Close();
}
return resultDocument;