2008-10-01 60 views

回答

5

幾年前,我不得不自己解決這個問題。我管理它的唯一方法是創建一個包含節點列表中的節點的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來創建元素(我之前寫過這段代碼,從那時起我學到了更多東西 - 但是我知道上面的代碼工作,我沒有嘗試了任何替代品)。

0

最後說明最有用,我已經將XmlNodeList轉換爲XmlDocument,因此可以在那裏使用Navigator並將其創建爲XPathNodeIterator。

感謝您的幫助!

+0

你是不是歡迎。我記得當我試圖解決這個問題時,我感到非常沮喪。 – 2008-10-01 14:18:52

0

以前提供的答案沒有成功。

使用AppendChild()將以前選定的XmlNodeList節點添加到新文檔導致嘗試附加源自不同文檔上下文的節點的異常。幾個試驗來解決這個問題,包括在列表中添加我自定義的默認命名空間選定節點。最後,我完全放棄了這種方法,並將我選擇節點的方式切換到XmlNodeList實例中。

代替

myXmlNode.SelectNodes(xpath, nsmgr) 

我使用

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

獲得創建XPathNodeIterator而不是XmlNodeList中。第二個代碼的結果XPathNodeIterator現在可以正確添加爲XsltArgumentsList的參數值。