Java (Oracle XDK)의 XSL 변환에 매개 변수로 XML 문서를 전달하는 방법은 무엇입니까?

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

  •  18-09-2019
  •  | 
  •  

문제

XML 문서를 XSLT 스타일 시트로 전달하려고합니다. 코드가 변환에 Oracle XDK를 사용하고 있다고 생각합니다 (JDK 1.4.2 및 Spring을 사용하고 있으며 코드베이스를 처음 사용하므로 결국 무엇이로드되고 있는지 잘 모르겠습니다). 첫 번째 시도에서 방금 문서 개체를 만들어 변압기의 매개 변수로 설정했지만 변수를 트리에 복사하려고 시도하면 결과가 없습니다. 떠오르는 질문은 다음과 같습니다.

  1. XSLT 변압기의 일반적인 경우에도 가능합니까? (일반적으로 XSLT 변수/매개 변수가 노드 세트를 포함 할 수 있으므로)

  2. Oracle XDK (또는 Xalan, ClassPath에있는 Xalan)에서 구체적으로 가능합니까?

  3. 그렇다면 어떻게 작동하게합니까?

도움이 되었습니까?

해결책

대답은 이것이 가능하지만 적어도 Oracle XSL 프로세서의 경우 직관적이지 않은 것입니다. 다음 (비 작업) 호출을 시도했습니다 (무고한 보호를 위해 이름이 변경됨) :

Document x = createDocumentForMe();
transformer.addParameter("param",x);

그리고

Document x = createDocumentForMe();
transformer.addParameter("param",new DOMSource(x));

(Domsource가 java.xml.transform interface이기 때문에 Domsource가 작동한다는 근거로 두 번째). 결국 저를 위해 일한 호출은 XSL이 XPath를 사용한다는 통찰력을 취하는 것이며 변수의 유효한 유형은 본질적으로 문자열 또는 노드 세트이며 XPath는 노드 세트를 반환합니다. 다음은 저를 위해 작동합니다.

Document x = createDocumentForMe();
XPathExpression xpe = XPathFactory.newInstance().newXPath().compile("/");
transformer.addParameter("param",xpe.evaluate(x, XPathConstants.NODESET));

기본적으로 XPath를 사용하여 DOM 객체에서 전달 된 루트 문서 만 포함 된 노드 세트를 가져옵니다. 그러나 이것은 약간의 해킹처럼 보이며 다른 XSL 프로세서와 함께 작동하지 않을 수 있으므로 ymmv ...

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