C# 如何将XmlNodeList转换为节点集以在XSLT中使用?
我有一个XmlNodeList,我需要它的格式,然后可以通过从C#扩展方法调用它在XSLT样式表中重用C# 如何将XmlNodeList转换为节点集以在XSLT中使用?,c#,xml,xslt,C#,Xml,Xslt,我有一个XmlNodeList,我需要它的格式,然后可以通过从C#扩展方法调用它在XSLT样式表中重用 有人能帮忙吗?我曾读到,这可能与使用XPathNavigator有关,但我还是有点卡住了。几年前,我不得不自己解决这个问题。我管理它的唯一方法是创建一个包含节点列表中的节点的XML片段,然后传入片段的子节点 XsltArgumentList arguments = new XsltArgumentList(); XmlNodeList nodelist; XmlDocument nodesFr
有人能帮忙吗?我曾读到,这可能与使用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,所以我可以使用其中的导航器并将其创建为XPathNodeIterator
谢谢你的帮助 之前提供的答案没有成功 使用AppendChild()将以前选定的XmlNodeList节点添加到新文档中时,在尝试追加源自不同文档上下文的节点时出现异常。修复此问题的几次尝试包括添加自定义默认名称空间,列表中选定的节点将绑定到该名称空间。最后,我完全放弃了这种方法,并将选择节点的方式切换到XmlNodeList实例中 而不是
myXmlNode.SelectNodes( xpath, nsmgr )
我正在使用
myXmlNode.CreateNavigator().Select( xpath, nsmgr )
获取XPathNodeIterator而不是XmlNodeList。生成的第二个代码的XPathNodeIterator现在已作为参数值正确添加到XsltArgumentsList。非常欢迎您。我记得当我试图解决这个问题时,我是多么沮丧。