Ich werde jetzt darauf hinweisen, dass ich neu bei der Verwendung von Saxon bin, und ich habe versucht, die Dokumente und Beispiele in dem Paket zu folgen, aber ich habe einfach nicht Glück mit diesem Problem.Saxon 8 (Java-Version) Problem
Im Grunde versuche ich einige XML-Verarbeitung in Java mit Sachson V8. Um etwas zum Laufen zu bringen, nahm ich eine der im Paket enthaltenen Beispieldateien und modifizierte sie nach meinen Bedürfnissen. Es funktioniert, solange ich keine Namespaces verwende, und das ist meine Frage. Wie kann ich das Namespace-Problem umgehen? Ich verwende es nicht wirklich, aber es existiert in meinem XML, also muss ich es entweder benutzen oder es ignorieren. Jede Lösung ist in Ordnung.
Wie auch immer, hier ist mein Startcode. Es macht nichts anderes als eine xpath-Abfrage zu versuchen, es gegen das fest codierte XML-Dokument zu verwenden.
public static void main(String[] args) {
String query = args[0];
File XMLStream=null;
String xmlFileName="doc.xml";
OutputStream destStream=System.out;
XQueryExpression exp=null;
Configuration C=new Configuration();
C.setSchemaValidation(false);
C.setValidation(false);
StaticQueryContext SQC=new StaticQueryContext(C);
DynamicQueryContext DQC=new DynamicQueryContext(C);
QueryProcessor processor = new QueryProcessor(SQC);
Properties props=new Properties();
try{
exp=processor.compileQuery(query);
XMLStream=new File(xmlFileName);
InputSource XMLSource=new InputSource(XMLStream.toURI().toString());
SAXSource SAXs=new SAXSource(XMLSource);
DocumentInfo DI=SQC.buildDocument(SAXs);
DQC.setContextNode(DI);
SequenceIterator iter = exp.iterator(DQC);
while(true){
Item i = iter.next();
if(i != null){
System.out.println(i.getStringValue());
}
else break;
}
}
catch (Exception e){
System.err.println(e.getMessage());
}
}
Ein Beispiel XML-Datei hier ist ...
<?xml version="1.0"?>
<ns1:animal xmlns:ns1="http://my.catservice.org/">
<cat>
<catId>8889</catId>
<fedStatus>true</fedStatus>
</cat>
</ns1:animal>
Wenn ich dies mit einer Abfrage mit dem Namespace ausführen, bekomme ich einen Fehler. Zum Beispiel: /ns1:animal/cat/
gibt den Fehler: "Prefix ns1 wurde nicht deklariert".
Wenn ich die ns1: aus der Abfrage entfernen, gibt es mir nichts. Wenn ich das xml behandle, um das "ns1:" zu entfernen, das "Tier" vorangestellt wird, kann ich die Abfrage /animal/cat/
mit Erfolg laufen lassen.
Jede Hilfe würde sehr geschätzt werden. Vielen Dank.