Я сейчас укажу, что я новичок в использовании саксона, и я попытался следовать документации и примерам в пакете, но мне просто не повезло с этой проблемой.
По сути, я пытаюсь выполнить некоторую обработку 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/
.
Любая помощь будет принята с благодарностью. Спасибо.