gpt4 book ai didi

c# - .NET XML : What is the . NET 等同于 XmlDocument.TransformNode?

转载 作者:数据小太阳 更新时间:2023-10-29 02:55:36 24 4
gpt4 key购买 nike

在 native 编程中,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 .但就像它已被弃用的表亲一样,XslCompiledTransform 的 14 个重载都没有在输入参数中采用 xml。

那么在 C# .NET 2.0 中转换 xml 的公认方法是什么?

换句话说:完成以下辅助方法:

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)
{
...
}

最佳答案

函数将 IXPathNavigable 对象作为输入(XmlDoucment/XmlNode 类实现 IXPathNavigable)。

这是它的工作原理:

public string TransformDocument(XmlDocument doc, XmlDocument stylesheet)
{
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(stylesheet); // compiled stylesheet
System.IO.StringWriter writer = new System.IO.StringWriter();
transform.Transform(doc, null, writer);
return writer.ToString();
}

优化和改进:

  • 如果多次使用已编译的样式表,请缓存它。
  • 将 XSL 直接加载到 XslCompiledTransform 中,而不是先构建 XmlDocument。
  • 使用 XmlNode 代替 XmlDocument 使函数更通用。

关于c# - .NET XML : What is the . NET 等同于 XmlDocument.TransformNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/470286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com