XSLT 내에서 XMLNODELIST를 노드 세트로 변환하려면 어떻게합니까?

StackOverflow https://stackoverflow.com/questions/157554

  •  03-07-2019
  •  | 
  •  

문제

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 )

xmlnodelist 대신 xpathnodeiterator를 얻습니다. 두 번째 코드의 결과 XPathNodeIterator는 이제 XSLTARGUMentsList에 매개 변수 값으로 올바르게 추가됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top