Ich möchte eine xQuery-Datei in einer XML-Datei ausführen; Beim Kompilieren der Abfrage habe ich den folgenden Fehler. Ich verstehe diesen "Kontextelement" -Fehler nicht.XPTY0002 contextItem
CODE (Beispiel)
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
Fehler auf der Leitung 363 von Modul ohne systemId: XPD Y0002: Leading '/' kann nicht den Wurzelknoten des Baums auswählen, der das Kontextelement enthält: das Kontextelement ist undefiniert Ausnahme im Thread "main" net.sf.saxon.s9api.SaxonApiException: Leading '/' kann nicht auswählen Wurzelknoten des Baums, der das Kontextelement enthält: Das Kontextelement ist nicht definiert at net.sf.saxon.s9api.XQueryCompiler.compile (XQueryCompiler.java:504) bei utils.xquery.essai.main (essai.java:92) verursacht durch: net.sf.saxon.trans.XPathException: Leading '/' kann nicht den Wurzelknoten des Baums auswählen, der das Kontextelement enthält: Das Kontextelement ist nicht definiert at net.sf.saxon.expr.SingleNodeExpression.typeCheck (SingleNodeExpression.java:29) bei net.sf.saxon.expr.parser.ExpressionVisitor.typeCheck (ExpressionVisitor.java:206)
Können Sie mir einen Code erklären oder zeigen, mit dem ich dieses Problem lösen könnte?
Was ist mein Problem?
Wie wäre es mit Blick auf Zeile 363 und teilen Sie es hier, wenn Sie es nicht herausfinden können? Oder versuchen Sie noch besser, den Code auf ein Minimum zu reduzieren, um das Problem zu reproduzieren und den vollständigen Code zu veröffentlichen. Ist dieser Code zum Beispiel eine Funktion? –
'erklären Funktion local: checkRefTest() als xs: string { (: Text und explication hier :) let $ REFTEST:. =/Dmodule/Nachkomme :: REFTEST (=> Linie 363 hier) return lassen $ refTestKO : = für $ item in $ REFTEST' [...] –