2008-10-01 5 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로 변환 했으므로 이미 거기에서 네비게이터를 사용하고 XPathNodeIterator로 만들 수 있습니다.

도움 주셔서 감사합니다.

+0

귀하는 환영합니다. 내가 이것을 해결하려고 할 때 나는 얼마나 좌절했는지 기억한다. –

0

이전에 제공된 대답과 함께 성공하지 못했습니다.

이전에 선택한 XmlNodeList 노드를 AppendChild()를 사용하여 새 문서에 추가하면 다른 문서 컨텍스트에서 시작된 노드를 추가하는 데 예외가 발생합니다. 이 문제를 해결하기위한 몇 가지 시련은 목록에 선택된 사용자 정의 기본 네임 스페이스 노드를 추가하는 것이 포함됩니다. 마지막으로 접근 방식을 완전히 취소하고 노드를 XmlNodeList 인스턴스로 전환하는 방식을 전환했습니다. 대신

myXmlNode.SelectNodes(xpath, nsmgr) 

내가 대신 XmlNodeList의 XPathNodeIterator를 얻을

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

을 사용하고 있습니다. 결과적으로 두 번째 코드의 결과 XPathNodeIterator가 XsltArgumentsList에 매개 변수 값으로 올바르게 추가됩니다.

관련 문제