在 XmlDocument 上应用 XSLT 并获取更新的 XmlDocument
Apply XSLT on an XmlDocument and get the updated XmlDocument
我必须建立一个升级机制来更新 XML 个文档(到另一个 xml 个文档)。
我必须尊重的方法签名是:
public XmlDocument Update(XmlDocument sourceDocument){...}
在此应用 XSLT 文件的最有效方法是什么?
我希望能够使用 XslTransform class,但它只接受流和 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 将重命名一些节点,在中间添加一个节点,添加一个子节点)。有没有更好的方法?
我的 "only" 约束是:Input/Output:XmlDocument,要加载的外部 XSLT。
如果您想将 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;
我必须建立一个升级机制来更新 XML 个文档(到另一个 xml 个文档)。
我必须尊重的方法签名是:
public XmlDocument Update(XmlDocument sourceDocument){...}
在此应用 XSLT 文件的最有效方法是什么?
我希望能够使用 XslTransform class,但它只接受流和 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 将重命名一些节点,在中间添加一个节点,添加一个子节点)。有没有更好的方法?
我的 "only" 约束是:Input/Output:XmlDocument,要加载的外部 XSLT。
如果您想将 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;