나는 XSLT 스타일 시트 내에서 C# 확장 메서드에서 호출하여 다시 사용할 수있는 형식으로 XmlNodeList를 가져야합니다.XmlNodeList를 XSLT 내에서 사용할 NodeSet으로 변환하려면 어떻게해야합니까?
아무도 도와 줄 수 있습니까? 나는 그것이 XPathNavigator를 사용하는 것과 관련이 있을지 모르지만 나는 여전히 조금 붙어있다.
나는 XSLT 스타일 시트 내에서 C# 확장 메서드에서 호출하여 다시 사용할 수있는 형식으로 XmlNodeList를 가져야합니다.XmlNodeList를 XSLT 내에서 사용할 NodeSet으로 변환하려면 어떻게해야합니까?
아무도 도와 줄 수 있습니까? 나는 그것이 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로 만들 수 있습니다.
도움 주셔서 감사합니다.
이전에 제공된 대답과 함께 성공하지 못했습니다.
이전에 선택한 XmlNodeList 노드를 AppendChild()를 사용하여 새 문서에 추가하면 다른 문서 컨텍스트에서 시작된 노드를 추가하는 데 예외가 발생합니다. 이 문제를 해결하기위한 몇 가지 시련은 목록에 선택된 사용자 정의 기본 네임 스페이스 노드를 추가하는 것이 포함됩니다. 마지막으로 접근 방식을 완전히 취소하고 노드를 XmlNodeList 인스턴스로 전환하는 방식을 전환했습니다. 대신
myXmlNode.SelectNodes(xpath, nsmgr)
의
내가 대신 XmlNodeList의 XPathNodeIterator를 얻을
myXmlNode.CreateNavigator().Select(xpath, nsmgr)
을 사용하고 있습니다. 결과적으로 두 번째 코드의 결과 XPathNodeIterator가 XsltArgumentsList에 매개 변수 값으로 올바르게 추가됩니다.
귀하는 환영합니다. 내가 이것을 해결하려고 할 때 나는 얼마나 좌절했는지 기억한다. –