2

私は 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/を正常に実行できます。

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

0

箱から出して何かを動かしたい場合は、embedding-xquery-in-javaをチェックしてください。Saxon を使用していくつかのサンプル XQuery 式を評価する github プロジェクトがあります。

よろしく

于 2010-01-23T19:24:37.647 に答える