XML 파일에서 xQuery 파일을 실행하려고합니다. 쿼리를 컴파일 할 때 다음 오류가 있습니다. 이 "컨텍스트 항목"오류를 이해하지 못합니다.XPTY0002 contextItem
CODE (예)
String xmlFileName = "D:/fichierContenu.XML";
FileInputStream XmlStream = new FileInputStream(xmlFileName);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
FileInputStream fis = new FileInputStream(xmlFileName);
InputSource is = new InputSource(fis);
Document doc = builder.parse(is);
Element element = doc.getDocumentElement();
InputStream queryStream = queryStream = new FileInputStream("D:/TestsAuto.xq");
Processor proc = new Processor(false);
XQueryCompiler comp = proc.newXQueryCompiler();
XQueryExecutable exp = comp.compile(queryStream);
XQuery를
declare function local:checkRefTest() as xs:string {
(:text and explication here. :)
let $REFTEST := /dmodule/descendant::REFTEST ***(=> line 363 HERE)***
return
let $refTestKO :=
for $item in $REFTEST
return
if(fn:string-length($item/@RefTest)= 13) then
let $RefTest := fn:substring($item/@RefTest, 1, 6)
return
if ($RefTest = " ") then
if(fn:exists($item/@refval) and fn:exists($item/@refval2)) then
()
else
()
else
()
else
$item
return
if(fn:empty($refTestKO)) then
"OK"
else
fn:concat("NOK : test here ", "'",fn:string-join($refTestKO/@RefTest, "', '"),"'")
};
ERROR
없는 시스템 ID와 모듈의 라인 (363)에 에러 : XPD Y0002 : '/'선행 '/'컨텍스트 항목을 포함하는 트리의 루트 노드를 선택할 수 없습니다. : 컨텍스트 항목이 정의되지 않았습니다. 스레드 "main"의 예외 net.sf.saxon.s9api.SaxonApiException : 선행 '/'는 선택할 수 없습니다. 컨텍스트 항목이 포함 된 트리의 루트 노드 : 컨텍스트 항목이 정의되지 않았습니다. net.sf.saxon.s9api.XQueryCompiler.compile에있는 (XQueryCompiler.java:504) at utils.xquery.essai.main (essai.java:92) 에 의해 발생 : net.sf.saxon.trans.XPathException : 선행 '/'컨텍스트 항목이 포함 된 트리의 루트 노드를 선택할 수 없습니다. 문맥 항목이 정의되지 않았습니다. at net.sf.saxon.expr.SingleNodeExpression.typeCheck (SingleNodeExpression.java:29) at net.sf.saxon.expr.parser.ExpressionVisitor.typeCheck (ExpressionVisitor.java:206)
이 문제를 해결할 수있는 코드를 설명해 주시겠습니까?
내 문제는 무엇입니까?
363 번 라인을 살펴보고 알아낼 수 없다면 여기에서 공유하는 것이 어떻습니까? 또는 문제를 재현하고 전체 코드를 게시하려면 코드를 최소로 줄이는 것이 좋습니다. 그 코드가 함수 안에 있습니까? –
은'기능을 지역 선언 checkRefTest를() XS로 : 문자열 { (: 텍스트와 해설을 여기에 :) 하자 $의 REFTEST을 :. =/D 가군/자손 :: REFTEST (=> 라인 363 여기) 반환 $ refTestKO하자 : = $ REFTEST의 $ item에 대해 [...] –