私は saxon を初めて使用することを指摘しておきます。パッケージ内のドキュメントと例に従ってみましたが、この問題にうまく対応できませんでした。
基本的に、saxon v8を使用してJavaでxml処理を実行しようとしています。何かを機能させるために、パッケージに含まれているサンプル ファイルの 1 つを使用して、必要に応じて変更しました。名前空間を使用していない限り機能します。それが私の質問です。名前空間の問題を回避するにはどうすればよいですか? 私は本当にそれを使用する気にはなりませんが、それは私の xml に存在するので、使用するか無視する必要があります。どちらのソリューションでも問題ありません。
とにかく、これが私のスターターコードです。それは何もしませんが、ハードコードされたxmlドキュメントに対してそれを使用しようとするxpathクエリを取ります。
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: を削除しても、何も得られません。「animal」の前に付けられた「ns1:」を削除するように xml を修正すると、クエリ/animal/cat/
を正常に実行できます。
どんな助けでも大歓迎です。ありがとう。