繁体   English   中英

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

[英]An example how to apply xsl transformation to a single XmlNode in C#

这是我正在尝试做的事情:我有一个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()上调用Transform() )。

要应用转换器,可以使用Transform方法,该方法适用于实现包含XmlNode的IXPathNavigable的任何内容。 有关信息,请参阅http://technet.microsoft.com/en-us/library/ms163430(v=vs.100).aspx

如果这不是您所需要的,您可以更新问题以描述您想要的输出。

编辑:请注意接受答案(以及上面链接中的页面)中的指导,如果您传递的节点是文档的一部分,它可能会影响整个文档。 因此,最好不要将转换应用于XML文档中的节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM