c# - 如何在 C# 中将 xsl 转换应用于单个 XmlNode 的示例

标签 c# xml xslt

这是我正在尝试做的事情:我有一个 XmlDocument,它已经加载到内存中。我想对该文档的单个节点应用 xsl 转换。

代码如下:

var xDoc=GetXmlDocument();
var myNode=xDoc.SelectSingleNode("//node");
var xslTransformer=new XslCompiledTransform(); 
xslTransformer.Load(new XmlTextReader(new StringReader(myXslText)));

现在我需要在 myNode 上应用 xslTransformer。任何人都可以给我一个代码示例吗?到目前为止,我所看到的仅适用于输入和输出文件。

最佳答案

这是一个如何执行此操作的示例,摘自 MSDN 文档:

// Load an XPathDocument.
XPathDocument doc = new XPathDocument("books.xml");

// Locate the node fragment.
XPathNavigator nav = doc.CreateNavigator();
XPathNavigator myBook = nav.SelectSingleNode("descendant::book[@ISBN = '0-201-63361-2']");

// Create a new object with just the node fragment.
XmlReader reader = myBook.ReadSubtree();
reader.MoveToContent();

// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("single.xsl");

// Transform the node fragment.
xslt.Transform(reader, XmlWriter.Create(Console.Out, xslt.OutputSettings));

有关详细信息,请参阅:http://technet.microsoft.com/en-us/library/wkx4fcc4.aspx

请注意:

当您转换包含在 XmlDocumentXPathDocument 对象中的数据时,XSLT 转换将应用于整个文档。换句话说,如果您传入文档根节点以外的节点,这不会阻止转换过程访问加载文档中的所有节点。要转换节点片段,您必须创建一个仅包含节点片段的单独对象,并将该对象传递给 Transform 方法。

这就是为什么在文档的节点上应用转换可能会导致意外和不需要的结果——例如,转换可以访问不在提供的节点的子树中的其他节点——例如兄弟节点或祖先节点。

这就是为什么我强烈建议不要在任何节点(文档节点除外)上简单地调用 Transform()

关于c# - 如何在 C# 中将 xsl 转换应用于单个 XmlNode 的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9501689/

相关文章:

c# - 弹道库

python - 排序 XML 文件

xslt - 如何删除 xslt 1.0 中的 namespace

xml - 如何使用 xslt 中的 xml 数据源将 unicode 转换为 iso?

php - xPath SimpleXMLElement 中的 XML 子节点

xml - 如何使用 XSLT 从子节点获取父节点

c# - 单词后匹配单词

c# - List<int> test = {1, 2, 3} - 它是功能还是错误?

c# - 强制 CEFSharp 下载而不显示对话框

asp.net - JSON 转换中丢失的 xml 数据