私はsaxonを使い慣れていないことを指摘していますが、パッケージのドキュメントと例を試してみましたが、問題。Saxon 8(Java版)の問題
基本的に、私はsaxon v8を使ってjavaでいくつかのxml処理をしようとしています。何か動作するためには、パッケージに含まれているサンプルファイルの1つを取り出し、必要に応じて修正しました。私が名前空間を使用していない限り、それは動作します、それは私の質問です。名前空間の問題を回避するにはどうすればよいですか?私は本当にそれを使用する気にしないが、私の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:をクエリから削除すると、何も表示されません。私が動物の前に "ns1:"を取り除くためにxmlを医者にしたら、私は質問/animal/cat/
を成功裏に走らせることができます。
ご協力いただければ幸いです。ありがとう。