Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将XmlNodeList转换为节点集以在XSLT中使用?_C#_Xml_Xslt - Fatal编程技术网

C# 如何将XmlNodeList转换为节点集以在XSLT中使用?

C# 如何将XmlNodeList转换为节点集以在XSLT中使用?,c#,xml,xslt,C#,Xml,Xslt,我有一个XmlNodeList,我需要它的格式,然后可以通过从C#扩展方法调用它在XSLT样式表中重用 有人能帮忙吗?我曾读到,这可能与使用XPathNavigator有关,但我还是有点卡住了。几年前,我不得不自己解决这个问题。我管理它的唯一方法是创建一个包含节点列表中的节点的XML片段,然后传入片段的子节点 XsltArgumentList arguments = new XsltArgumentList(); XmlNodeList nodelist; XmlDocument nodesFr

我有一个XmlNodeList,我需要它的格式,然后可以通过从C#扩展方法调用它在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,所以我可以使用其中的导航器并将其创建为XPathNodeIterator


谢谢你的帮助

之前提供的答案没有成功

使用AppendChild()将以前选定的XmlNodeList节点添加到新文档中时,在尝试追加源自不同文档上下文的节点时出现异常。修复此问题的几次尝试包括添加自定义默认名称空间,列表中选定的节点将绑定到该名称空间。最后,我完全放弃了这种方法,并将选择节点的方式切换到XmlNodeList实例中

而不是

myXmlNode.SelectNodes( xpath, nsmgr )
我正在使用

myXmlNode.CreateNavigator().Select( xpath, nsmgr )

获取XPathNodeIterator而不是XmlNodeList。生成的第二个代码的XPathNodeIterator现在已作为参数值正确添加到XsltArgumentsList。

非常欢迎您。我记得当我试图解决这个问题时,我是多么沮丧。