В нативном программировании объект IXMLDOMDocument2 имел метод tranformNode()
:
public BSTR transformNode(IXMLDOMNode stylesheet);
Таким образом, в конце я мог преобразовать XML-документ, используя:
public string TransformDocument(IXMLDOMDocument2 doc, IXMLDOMDocument2 stylesheet)
{
return doc.TransformNode(stylesheet);
}
Я пытаюсь найти управляемый эквивалент. Я уже обнаружил XmlDocument объект:
public string TransformDocument(XmlDocument doc, XmlDocument stylesheet)
{
//return doc.TransformNode(stylesheet); //TransformNode not supported
}
Так что же такое управляемый способ преобразования xml?
Я наткнулся на устаревший объект XslTransform , но ни одна из 18 перегрузок не принимает документ XML или таблицу стилей XML.
Microsoft указывает на замену: System.Xml.Xsl.XslCompiledTransform . Но, как и его устаревший двоюродный брат, ни одна из 14 перегрузок XslCompiledTransform не принимает XML во входном параметре.
Так, каков принятый метод для преобразования xml в C # .NET 2.0?
Другими словами: выполните следующий вспомогательный метод:
public string TransformDocument(XmlDocument doc, XmlDocument stylesheet)
{
//todo: figure out how to transform xml in C#
}
Ответ
Waqas получил ответ. Вот еще одно, очень похожее решение:
/// <summary>
/// This method simulates the XMLDOMDocument.TransformNode method
/// </summary>
/// <param name="doc">XML document to be transformed</param>
/// <param name="stylesheet">The stylesheet to transform with</param>
/// <returns></returns>
public static string Transform(XmlDocument doc, XmlDocument stylesheet)
{
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(stylesheet); // compiled stylesheet
System.IO.StringWriter writer = new System.IO.StringWriter();
transform.Transform(doc, XmlWriter.Create(writer));
return writer.ToString();
}
Примечание: Если вы настроены на повышение производительности, вам может потребоваться создать перегрузку для передачи предварительно скомпилированного преобразования, если вы собираетесь преобразовать более одного раза.
public static string Transform(XmlDocument doc, XslCompiledTransform stylesheet)
{
...
}