如何将XmlNodeList转换为要在XSLT中使用的NodeSet?

时间:2020-03-06 14:58:31  来源:igfitidea点击:

我有一个XmlNodeList,我需要以一种格式使用它,然后可以通过从Cextension方法调用它来在XSLT样式表中重新使用它。

有人可以帮忙吗?我已经读到它可能与使用XPathNavigator有关,但是我仍然有些卡住。

解决方案

几年前,我不得不自己解决这个问题。我管理它的唯一方法是创建一个XML片段,其中包含节点列表中的节点,然后传入该片段的子代。

XsltArgumentList arguments = new XsltArgumentList();
XmlNodeList nodelist;
XmlDocument nodesFrament = new XmlDocument();
XmlNode root = nodesFragment.CreateElement("root");
foreach (XmlNode node in nodeList)
{
    root.AppendChild(node);
}
nodesFragment.AppendChild(root);

arguments.AddParam("argumentname", string.Empty, nodesFragment.CreateNavigator().SelectChildren(XPathNodeType.All));

然后,我们当然需要确保XSLT中具有相应的参数。

请注意,我们可能不需要其他XmlDocument。我们可以仅在根XmlNode实例上调用CreateNavigator()并使用现有的XmlDocument来创建元素(我之前写过这段代码,从那时起我已经学到了很多,但是我知道上面的代码有效,但我没有尝试过任何替代方案)。

最后的注释是最有用的,实际上我已经将XmlNodeList转换为XmlDocument,因此可以仅使用那里的Navigator并将其创建为XPathNodeIterator。

谢谢帮助!