Теперь я укажу, что я новичок в использовании саксона, и я пробовал следовать документам и примерам в пакете, но мне просто не повезло с этим проблема.Проблема Saxon 8 (Java version)
В принципе, я пытаюсь выполнить некоторую обработку XML в java, используя saxon v8. Чтобы получить что-то работающее, я взял один из образцов файлов, включенных в пакет, и был изменен для моих нужд. Он работает до тех пор, пока я не использую пространства имен, и это мой вопрос. Как я могу обойти проблему пространства имен? Я действительно не хочу его использовать, но он существует в моем xml, поэтому мне нужно либо использовать его, либо игнорировать его. Любое решение в порядке.
В любом случае, вот мой код стартера. Это не делает ничего, кроме запроса xpath, пытающегося использовать его против жестко закодированного документа xml.
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());
}
}
XML-файл примера здесь ...
<?xml version="1.0"?>
<ns1:animal xmlns:ns1="http://my.catservice.org/">
<cat>
<catId>8889</catId>
<fedStatus>true</fedStatus>
</cat>
</ns1:animal>
Если я запускаю это с запросом, включая пространство имен, я получаю сообщение об ошибке. Например: /ns1:animal/cat/
дает ошибку: «Префикс ns1 не был объявлен».
Если я удалю ns1: из запроса, это ничего не дает мне. Если я доктор xml, чтобы удалить «ns1:», добавленный к «животному», я с успехом могу выполнить запрос /animal/cat/
.
Любая помощь была бы принята с благодарностью. Благодарю.